用高精度方法,求s=1+2+3+.....+n的精度值(n以一般整数输入,n<=10^100)
1 #include<iostream> 2 #include<cstring> 3 #include<string> 4 using namespace std; 5 int main() 6 { 7 char str1[256],str2[256]; 8 int a[256],b[256],c[256]; 9 int lena,lenb,lenc; 10 int x; 11 int i,j; 12 13 memset(a,0,sizeof(a)); 14 memset(b,0,sizeof(b)); 15 memset(c,0,sizeof(c)); 16 17 cin>>str1;//输入乘数str1 18 //cin>>str2;//输入乘数str2 19 strcpy(str2,str1); 20 lena=strlen(str1); 21 lenb=strlen(str2); 22 for(i=0;i<=lena-1;i++)//乘数str1存入数组a 23 a[lena-i]=str1[i]-'0'; 24 25 for(i=0;i<=lenb-1;i++)//乘数str2存入数组b 26 b[lenb-i]=str2[i]-'0'; 27 28 b[1]++; 29 for(int i = 1; i < lenb; i++) 30 { 31 if(b[i]>=10) 32 { 33 b[i] = 0; 34 b[i+1]++; 35 } 36 else 37 { 38 break; 39 } 40 } 41 42 for(i=1;i<=lenb;i++) 43 { 44 x=0;//用于存放进位 45 for(j=1;j<=lena;j++)//对乘数每一位进行处理 46 { 47 c[i+j-1]=a[j]*b[i]+x+c[i+j-1];//当前乘积+上次乘积进位+原数 48 x=c[i+j-1]/10; 49 c[i+j-1]%=10; 50 } 51 c[i+lena]=x;//进位 52 } 53 lenc=lena+lenb; 54 55 56 for(i=lenc;i>=1;i--) 57 { 58 if(c[i]%2==0) 59 { 60 c[i]/=2; 61 } 62 else 63 { 64 c[i-1]+=10; 65 c[i]/=2; 66 } 67 } 68 69 while((c[lenc]==0)&&(lenc>1))//删除前导0 70 lenc--; 71 for(i=lenc;i>=1;i--)//倒序输出 72 { 73 cout<<c[i]; 74 } 75 cout<<endl; 76 return 0; 77 }