5-38 数列求和-加强版 (20分)

给定某数字AA1\le A\le 91A9)以及非负整数NN0\le N\le 1000000N100000),求数列之和S = A + AA + AAA + \cdots + AA\cdots AS=A+AA+AAA++AAANNAA)。例如A=1A=1N=3N=3时,S = 1 + 11 + 111 = 123S=1+11+111=123

输入格式:

输入数字AA与非负整数NN

输出格式:

输出其NN项数列之和SS的值。

输入样例:

1 3

输出样例:

123

这道题有两种思路:

1.大数的求和问题:

//5-38 数列求和-加强版 
#include
#include
#include
char a[10000005],b[10000005],back[10000005];
void add()
{
    int i,j,k,up,x,y,z,l;
    char *c;
    if (strlen(a)>strlen(b)) l=strlen(a)+2; else l=strlen(b)+2;
    c=(char *) malloc(l*sizeof(char));
    i=strlen(a)-1;
    j=strlen(b)-1;
    k=0;up=0;
    while(i>=0||j>=0)
        {
            if(i<0) x='0'; else x=a[i];
            if(j<0) y='0'; else y=b[j];
            z=x-'0'+y-'0';
            if(up) z+=1;
            if(z>9) {up=1;z%=10;} else up=0;
            c[k++]=z+'0';
            i--;j--;
        }
    if(up) c[k++]='1';
    i=0;
    c[k]='\0';
    for(k-=1;k>=0;k--)
        back[i++]=c[k];
    back[i]='\0';



int main()
{


int A,N;
scanf("%d%d",&A,&N);
if(N==0) printf("0\n");
else
{
int f=A;
sprintf(a,"%d",0);
sprintf(b,"%d",A);
for(int i=0;i{
add();
int j;
for( j=0;back[j]!='\0';j++)
  a[j]=back[j];
a[j]='\0';
for(j=0;b[j]!='\0';j++);
b[j]=A+'0';b[j+1]='\0'; 
}
puts(back);
}
return 0;
}

这样做的结果只有16分,最后两组数据超时

法二:成功AC

#include  
#include  
#include  
int num[1000000]; 
 int main() 

 int A; 
 int N;
 int i; 
 int j; 
 int t; 
 int flag; 
 scanf("%d%d",&A,&N); 
 if(N == 0) 
 printf("0\n"); 
 else 
 { 
      flag = 0; 
      for(i=N, j=0; i>=1; i--, j++) 
       { 
            t = A*i + flag; 
            flag = t / 10; 
            num[j] = t % 10; 
        } 
         if(flag > 0)
         { 
           num[j] = flag; 
           j++; 
         } 
       for(i=j-1; i>=0; i--) 
        { 
            printf("%d",num[i]); 
        } 
  } 
    return 0; 
}

思路如下:
/*
         进位flag 个位 
99999       9*5+0=45   4  
 9999 9*4+4=40   4        0 
  999 9*3+4=31   3        1 
   99 9*2+3=21   2        1 
+   9 9*1+2=11   1         1
flag>=1,需要前进以为为flag; 
---------
 
*/


你可能感兴趣的:(C语言,ACM)