读书人

acm 1002 水题. 麻烦~\()/~啦啦

发布时间: 2012-04-16 16:20:04 作者: rapoo

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)互相之间可以直接赋值

[解决办法]
将字符转化成数字才能相加吗?
[解决办法]

探讨
将字符转化成数字才能相加吗?

[解决办法]
字符串转数字而已。
[解决办法]
可以用stl中string去处理这些大数运算问题,可以不必担心什么长度问题,而且省事不少,可以将精力集中在算法改进上。
[解决办法]
大数运算……百度一下,找个类模板,直接用
[解决办法]
前几个星期才刚接触POJ,这题我死活想了近1个小时想出来...
[解决办法]
不就是字符到数字,数字到字符的转化吗?

读书人网 >C++

热点推荐