#include<stdio.h>
#include<string.h>
int main() {
int n[100] = {0}, m[100] = {0};
int k = 0, reward;
char num1[100], num2[100];
scanf("%s%s", num1, num2);
reward = strlen(num1) > strlen(num2) ? strlen(num1) : strlen(num2);
for (int i = strlen(num1) - 1; i >= 0; i--) {
n[k++] = num1[i] - '0';
}
k = 0;
for (int i = strlen(num2) - 1; i >= 0; i--) {
m[k++] = num2[i] - '0';
}
if ((n[strlen(num1) - 2] + m[strlen(num2) - 2] > 9 && (n[reward - 1] == 9 || m[reward - 1] == 9)) ||
(strlen(num1) == strlen(num2) && n[strlen(num1) - 1] + m[strlen(num2) - 1] > 9)) {
printf("1");
}
for (int i = 0; i < reward; i++) {
n[i] = n[i] + m[i];//TODO
if (n[i] > 9) {
n[i] -= 10;//TODO
n[i + 1]++;
}
}
for (int i = reward - 1; i >= 0; i--) {
printf("%d", n[i]);
}
return 0;
}
11111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111199999999999999999999999999999999999999999999999
11111111111111111111122222222222311111111111111111111111111111111111111111111110
--------------------------------
Process exited after 24.21 seconds with return value 0
请按任意键继续. . .
全是vip,老子自己发。当代白嫖怪,大学生新生表示不服。
续上:
新手思路,设定两对数组,整型(m,n)和 字符串(num1,num2)。
再, 进行倒序循环,通过“n[k++] = num1[i] - '0';”将得到的字符串转换为整型。
其中, reward 计算最长字符节,方便进行以下行为:1111+1111999 转变为
1111000 对位相加,并通过判断是否大于9而决定是否进位,如果是则本位减十。(第三个for)
9991111 +
本文存在一个值得探讨的问题(当然这里解决了"第一个if"),关于最大对位进位问题:
90+10=100;89+11=100;
其中,09 (个位在左)是由十位引发的进位 98 是由个位引发的近位。
01 + 11 +
而这,是一个关键点,而我用了一个比较直接的方法。如果字符长度相同,那么计算其最大位相加是否大于九,或者计算reward的下一位相加是否大于9,如果是那么判断“reward位”是否存在9,这里字符长度相同的情况已经排除,也不用担心数位差距存在错误,因为倒序的过程中更高位数会被零补位,例如9+901=>900+109,并不会出现错误。
最后, 倒序输出(第四个for)。
至于对于最大对位进位的问题是否存在更优解后续在学习与成长的过程中我会不断的去思考。
接下来我会去思考关于两个长整数的乘法的解决方法,并把思路和解法(包括思考过程)叙述出来,乘法也更有挑战性,也更有兴趣。只谈兴趣与自由,有兴趣可以一起思考,成长与打发时光。(超长整数的加法不充vip搜不到)以后就发那些平时要写的作业但是难以搜到的。就当无聊打发时间了,我一定坚持。多思考,自己写,加油,此处非标准答案参上。