acm 1002 水题. 麻烦~\(≧▽≦)/~啦啦啦
题目就是求两个数(很大的数)的和.所以这个数用int64位存不了.只能用数组存.用a[i],b[i]分别保存两个数,然后用c[i]表示这两个数的和.然后还有还有两个字符串数组来保存算这两个数要用到的. 大牛懂的, 不懂的可以问我..O(∩_∩)O哈哈~
#include <stdio.h>
#include <string.h>
int main(){
char str1[1001], str2[1001];
int t, i, len_str1, len_str2, len_max, num = 1, k;
scanf("%d", &t);
getchar();
while(t--){
int a[1001] = {0}, b[1001] = {0}, c[1001] = {0};
scanf("%s", str1);
len_str1 = strlen(str1);
for(i = 0; i <= len_str1 - 1; ++i)
a[i] = str1[len_str1 - 1 - i] - '0';//这里为什么要减个'0'?就这里看不懂,还有我一直
搞不懂一个字符数组
//和整型数组是怎么转化的? 就像在这里.两个不同类型的数组就直接可以这样赋值?
scanf("%s",str2);
len_str2 = strlen(str2);
for(i = 0; i <= len_str2 - 1; ++i)
b[i] = str2[len_str2 - 1 - i] - '0';
if(len_str1 > len_str2)
len_max = len_str1;
else
len_max = len_str2;
k = 0;
for(i = 0; i <= len_max - 1; ++i){
c[i] = (a[i] + b[i] + k) % 10;
k = (a[i] + b[i] + k) / 10;
}
if(k != 0)
c[len_max] = 1;
printf("Case %d:\n", num);
num++;
printf("%s + %s = ", str1, str2);
if(c[len_max] == 1)
printf("1");
for(i = len_max - 1; i >= 0; --i){
printf("%d", c[i]);
}
printf("\n");
if(t >= 1)
printf("\n");
}
return 0;
}
[解决办法]
将数字字符转化为数字
[解决办法]
字符通过ASCII码转化成整数,0到9的ASCII码减去0 的ASCII码刚好这个数的值
[解决办法]
1.0-9的ascii码在ascii表中连续的,且大小是从小到大,所以要将'0'-'9'转为数字的0-9直接-'0'就可以了
2.C/C++对不同类型有隐式转换规则的,基本的数值类型(char,short,int,long,float,double)互相之间可以直接赋值
[解决办法]
将字符转化成数字才能相加吗?
[解决办法]