1534 - 数字阶梯求和
给定a和n,计算a+aa+aaa+a...a(n个a)的和。
Input
测试数据有多组,输入a,n(1<=a<=9,1<=n<=100)。
Output
对于每组输入,请输出结果。
Examples
Input
6 7
Output
7407402
Hint
注意数据类型的范围是否够用。如果不够用,则应该用字符串来模拟运算。
Solution C
#include<stdio.h> #include<string.h> int main() { int a,n,x,i,l; int qq[100]; while(scanf("%d%d",&a,&n)!=EOF) { l=0; x=n; int tt[200]={0}; while(n) { memset(qq,0,sizeof(int)*100); for(i=n-1;i>=0;i--) { qq[i]=a; } for(i=0;i<n;i++) { tt[i]+=qq[i]; } n--; } for(i=0;i<200;i++) { if(tt[i]>=10) { tt[i+1]+=tt[i]/10; tt[i]%=10; } } for(i=199;i>=0;i--) { if(tt[i]!=0)l=1; if(l==1)printf("%d",tt[i]); } printf("\n"); } return 0; }
Solution C++
#include<stdio.h> #include<string.h> void Add(char *str1,char *str2,char *str3) { int i,j,i1,i2,tmp,carry; int len1=strlen(str1),len2=strlen(str2); char ch; i1=len1-1; i2=len2-1; j=carry=0; for(;i1>=0&&i2>=0;++j,--i1,--i2) { tmp=str1[i1]-'0'+str2[i2]-'0'+carry; carry=tmp/10; str3[j]=tmp%10+'0'; } while(i1>=0) { tmp=str1[i1--]-'0'+carry; carry=tmp/10; str3[j++]=tmp%10+'0'; } while(i2>=0) { tmp=str2[i2--]-'0'+carry; carry=tmp/10; str3[j++]=tmp%10+'0'; } if(carry) str3[j++]=carry+'0'; str3[j]='\0'; for(i=0,--j;i<j;++i,--j) { ch=str3[i]; str3[i]=str3[j]; str3[j]=ch; } } int main() { char s[200],t[200],ans[200]; int n,i,l; while(scanf("%s%d",&s,&n)!=EOF) { strcpy(ans,s); for(i=2;i<=n;i++) { l=strlen(s); s[l]=s[0]; s[l+1]='\0'; Add(ans,s,t); strcpy(ans,t); } puts(ans); } return 0; }
Hint
注意数据类型的范围是否够用。如果不够用,则应该用字符串来模拟运算。