如果我有两个字符串:
a = "1234"
b = "4321"
我可以像这样将两个数字加在一起:
for(i=0; i<width-1; i++){
sum = (a[width-2-i]-48) + (b[width-2-i]-48) + carry;
carry = 0;
if(sum > 9){
carry = 1;
sum-=10;
}
answer[i] = sum+48;
}
if(carry) answer[i++] = carry+48;
answer[i]= 0;
然后反转(宽度等于strlen(a))。
如果出现以下情况,我怎么能做同样的事情呢?
a = "12345"
b = "4321"
我需要重新分配内存吗?或者什么?
(顺便说一句 - the problem I'm trying to solve 使用了许多 50 位数字,因此据我所知,strtoul 或 strtoull 是不可能的。Here's my code so far。)
最佳答案
int getcharval(const char *s, int idx) {
if (idx < strlen(s))
return s[strlen(s) - idx - 1] - 48;
return 0;
}
void add() {
const char *a = "1234";
const char *b = "13210";
char answer[256];
int i, wa=strlen(a), wb=strlen(b), width, sum, carry;
width = wa > wb ? wa : wb;
for(i=0; i<width; i++){
char ca = getcharval(a, i);
char cb = getcharval(b, i);
printf("%d %d\n", ca, cb);
sum = ca + cb + carry;
carry = 0;
if(sum > 9){
carry = 1;
sum-=10;
}
answer[i] = sum+48;
}
if(carry) answer[i++] = carry+48;
answer[i]= 0;
for (i = 0; i < strlen(answer) / 2; i++) {
char t = answer[i];
answer[i] = answer[strlen(answer) - i - 1];
answer[strlen(answer) - i - 1] = t;
}
printf("%s\n", answer);
}
关于C - 如果长度不同,则将 2 个字符串中的数字加在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16660677/