您的位置:首页 > 产品设计 > UI/UE

UVa 424 - Integer Inquiry

2012-04-22 09:58 302 查看




这道题目就是大整数的相加,类似于给你一个很大的数求阶乘,起主导思想是一样的,说不清楚,看代码吧:

#include <stdio.h>
#include <string.h>
int main()
{
int i,j,n,m,t,s,flag1,flag2,x,max,k,flag3;
char s1[1000];
int a[100][100],b[100000];
int l;
flag1=0;
for(i=0;i<=99;i++)
{
for(j=0;j<=99;j++)
{
a[i][j]=-1;
}
}
max=0;
while(scanf("%s",s1)!=EOF)
{
s=0;
l=strlen(s1);
if(l==1&&s1[0]=='0')
{
break;
}
flag2=0;
for(i=l-1;i>=0;i-=4)
{
t=1;
s=0;
for(j=1;j<=4&&i-j+1>=0;j++)
{
s+=(s1[i-j+1]-'0')*t;
t*=10;
}
a[flag1][flag2]=s;
flag2+=1;
}
if(flag2>=max)
{
max=flag2;
}
flag1+=1;
}
x=0;
int p=0;
for(i=0;i<=99;i++)
{
b[i]=0;
}
flag3=0;
for(i=0;i<=max-1;i++)
{
s=0;
for(j=0;j<=flag1-1;j++)
{
if(a[j][i]!=-1)
{
s+=a[j][i];
}
}
for(j=x;j<=x;j++)
{
s=s+p;
p=0;
if(s>9999)
{
b[j]+=s%10000;
p=s/10000;
s=0;
x+=1;
}else
{
b[j]+=s;
}
}
flag3+=1;
if(i==max-1)
{
k=x;
}
x=flag3;
}
printf("%d",b[k]);
for(j=k-1;j>=0;j--)
{

if(b[j]>999)
{
;
}else if(b[j]>99)
{
printf("0");
}else if(b[j]>9)
{
printf("00");
}else
{
printf("000");
}
printf("%d",b[j]);
}
printf("\n");
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  integer