您的位置:首页 > 其它

HDOJ 1002 A + B Problem II

2012-09-11 13:40 246 查看
~~~题目链接~~~

#include <stdio.h>
#include <string.h>
int main()
{
int i = 0, t = 0, c = 0, len = 0, len1 = 0, len2 = 0, cas = 0;
char str1[1002], str2[1002];
int num1[1002], num2[1002];
scanf("%d", &t);
while(t--)
{
memset(num1, 0, sizeof(num1));
memset(num2, 0, sizeof(num2));
scanf("%s %s", str1, str2);
len1 = strlen(str1);
len2 = strlen(str2);
for(i = 0; i<len1; i++) num1[i] = str1[len1-i-1]-'0';//把数倒置
for(i = 0; i<len2; i++) num2[i] = str2[len2-i-1]-'0';
len = len1>len2? len1:len2;
c = 0;//为余数
for(i = 0; i<len; i++)
{
c = num1[i]+num2[i]+c;
num1[i] = c%10;
c /= 10;
}
if(c)
num1[i++] = c;
while(num1[i] == 0 && i>-1) i--;//去前0
printf("Case %d:\n", ++cas);
printf("%s + %s = ", str1, str2);
while(i>-1)
printf("%d", num1[i--]);
printf("\n");
if(t != 0)
printf("\n");
}
return 0;
}


大数减法(不知道对不对)

#include <stdio.h>
#include <string.h>
int main()
{
int i = 0, flag = 0, flag2 = 0, len = 0, len1 = 0, len2 = 0;
char str1[1002], str2[1002];
int n1[1002], n2[1002], n3[1002];
memset(n1, 0, sizeof(n1));
memset(n2, 0, sizeof(n2));
scanf("%s %s", str1, str2);
len1 = strlen(str1);
len2 = strlen(str2);
for(i = 0; i<len1; i++) n1[i] = str1[len1-1-i]-'0';//倒置
for(i = 0; i<len2; i++) n2[i] = str2[len2-1-i]-'0';
while(n1[len1-1] == 0 && len1>0)//忽略前0
len1--;
while(n2[len2-1] == 0 && len2>0)//忽略前0
len2--;
len = len1>len2? len1:len2;
for(i = len; len1 == len2 && i>-1; i--)//当 len1 == len2 时,比较大小
if(n1[i]>n2[i])
break;
else if(n1[i]<n2[i])
flag2 = 1;
if((len1<len2) || ((len1 == len2) && flag2))
{
memcpy(n3, n1, 1000);
memcpy(n1, n2, 1000);
memcpy(n2, n3, 1000);
flag = 1;
}
for(i = 0; i<len; i++)
{
if(n1[i]>=n2[i]) n1[i] = n1[i]-n2[i];
else
{
n1[i] = 1*10+n1[i]-n2[i];
n1[i+1] -= 1;
}
}
while(n1[i] == 0 && i>0) i--;
if(n1[0] != 0 && flag)
printf("-");
while(i>-1)
printf("%d", n1[i--]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: