我需要编写一个c程序,而不使用数组或字符串(只有stdio.h库),这将扫描3件事:
并打印两件事:
基数可以是2-36,其中10 = a,11 = b,...,36 = z 和num1 / 2将在该基地
中给出我想我可以在将数字转换为10的基数后计算所有内容。我的问题是如何在不使用字符串或数组的情况下将num1,num2拆分为单个整数/字符;以及如何将“3a4”读作“3-10-4”
答案 0 :(得分:1)
#include <stdio.h>
int inputNumWithBase(int base){
//input num >=0
int num = 0;
int ch;
putchar('>');
while('\n'!=(ch=getchar())){
int n;
switch(ch){
case '0': n = 0;break;
case '1': n = 1;break;
case '2': n = 2;break;
case '3': n = 3;break;
case '4': n = 4;break;
case '5': n = 5;break;
case '6': n = 6;break;
case '7': n = 7;break;
case '8': n = 8;break;
case '9': n = 9;break;
case 'a': n = 10;break;
case 'b': n = 11;break;
case 'c': n = 12;break;
case 'd': n = 13;break;
case 'e': n = 14;break;
case 'f': n = 15;break;
case 'g': n = 16;break;
case 'h': n = 17;break;
case 'i': n = 18;break;
case 'j': n = 19;break;
case 'k': n = 20;break;
case 'l': n = 21;break;
case 'm': n = 22;break;
case 'n': n = 23;break;
case 'o': n = 24;break;
case 'p': n = 25;break;
case 'q': n = 26;break;
case 'r': n = 27;break;
case 's': n = 28;break;
case 't': n = 29;break;
case 'u': n = 30;break;
case 'v': n = 31;break;
case 'w': n = 32;break;
case 'x': n = 33;break;
case 'y': n = 34;break;
case 'z': n = 35;break;
}
num = num*base + n;
}
return num;
}
int printNum(int num){
switch(num){
case 0: putchar('0');break;
case 1: putchar('1');break;
case 2: putchar('2');break;
case 3: putchar('3');break;
case 4: putchar('4');break;
case 5: putchar('5');break;
case 6: putchar('6');break;
case 7: putchar('7');break;
case 8: putchar('8');break;
case 9: putchar('9');break;
case 10: putchar('a');break;
case 11: putchar('b');break;
case 12: putchar('c');break;
case 13: putchar('d');break;
case 14: putchar('e');break;
case 15: putchar('f');break;
case 16: putchar('g');break;
case 17: putchar('h');break;
case 18: putchar('i');break;
case 19: putchar('j');break;
case 20: putchar('k');break;
case 21: putchar('l');break;
case 22: putchar('m');break;
case 23: putchar('n');break;
case 24: putchar('o');break;
case 25: putchar('p');break;
case 26: putchar('q');break;
case 27: putchar('r');break;
case 28: putchar('s');break;
case 29: putchar('t');break;
case 30: putchar('u');break;
case 31: putchar('v');break;
case 32: putchar('w');break;
case 33: putchar('x');break;
case 34: putchar('y');break;
case 35: putchar('z');break;
}
}
int printNumWithBase(int num, int base){
int r = num % base;
int q = num / base;
if(q)
printNumWithBase(q, base);
printNum(r);
}
int main(void){
int base = 10;
int num1, num2, sum;
base = inputNumWithBase(10);
num1 = inputNumWithBase(base);
num2 = inputNumWithBase(base);
sum = num1 + num2;
printNumWithBase(sum, base);
return 0;
}
答案 1 :(得分:0)
我不确定如何在不使用字符串或数组的情况下执行此操作,因为正如Hans所指出的那样,strtol函数是一个很好的起点。它使用字符指针操作。 鉴于您的问题需要您解释实际上是字符串的字符,您可能会被要求自己实现strtol函数。
我的建议是从scanf和strtol函数开始,并尝试首先解决问题,而不是要求在课堂外可能不存在的问题的异常解决方案。