大数乘法
大数乘法其实就是一个for循环控制一个大数的位上的数去和另外一个大树相乘,只需把每次相乘的结果加起来即可: #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int main() { char a[150],b[150]; int s[150],len;//b数组用来村相加的和 scanf("%s%s",a,b); //反转字符串,直接进行从低位进行操作,不需考虑字符串的长短带来的相加麻烦 reverse(a,a+strlen(a)); reverse(b,b+strlen(b)); int lenb = strlen(b); int lena = strlen(a); memset(s,sizeof(s)); for(int i = 0; i < lenb; i++) if(b[i]!='0') { int c = 0; for(int j = 0; j < lena; j++) { int sum =s[i+j] + (a[j]-48)*(b[i]-48)+c;//把每次每位求的的数加起来; s[i+j] = sum%10; c = sum/10; len = i + j; } if(c) { s[i+lena] += c; len = i + lena; } } //逆序输出结果 for(int i = len - 1; i >= 0; i--) printf("%dn",s[i]); printf("n"); return 0; } 南阳oj ??求高精度幂
时间限制:
3000?ms ?|? 内存限制:
65535?KB
难度:
2
代码: #include<stdio.h>#include<string.h> #include<algorithm> using namespace std; int main() { ? ? char a[150],b[150]; ? ? int n,s[150]; ? ? while(~scanf("%s%d",&n)) ? ? { ? ? ? ? if(n==0) ? ? ? ? { ? ? ? ? ? ? printf("1n"); ? ? ? ? ? ? continue; ? ? ? ? } ? ? ? ? if(n==1) ? ? ? ? { ? ? ? ? ? ? printf("%sn",a); ? ? ? ? ? ? continue; ? ? ? ? } ? ? ? ? int d = 0,len,l; ? ? ? ? int lena = strlen(a),lenb; ? ? ? ? int i = 0; ? ? ? ? for(; i < lena; i++) ? ? ? ? ? ? if(a[i] == '.') ? ? ? ? ? ? { ? ? ? ? ? ? ? ? d = (lena-i-1) * n; ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? for(int j = i; j < lena; j++) ? ? ? ? ? ? a[j] = a[j+1]; ? ? ? ? lenb = lena = strlen(a); ? ? ? ? reverse(a,a+lena); ? ? ? ? strcpy(b,a); ? ? ? ? for(l = 1; l < n; l++) ? ? ? ? { ? ? ? ? ? ? memset(s,sizeof(s)); //大数相乘 //去后导零 ? ? ? ? ? ? int i = 0,j = 0; ? ? ? ? ? ? while(!s[i]) ? ? ? ? ? ? ? ? {i++;d--;} ? ? ? ? ? ? for(; i <= len; i++) ? ? ? ? ? ? ? ? a[j++] = s[i] + 48; ? ? ? ? ? ? a[j] = ' '; ? ? ? ? ? ? lena = j; ? ? ? ? } ? ? ? ? lena = strlen(a); ? ? ? ? if(lena >= d) ? ? ? ? { ? ? ? ? ? ? for(int i = lena-1; i >= d; i--) ? ? ? ? ? ? ? ? printf("%c",a[i]); ? ? ? ? ? ? if(d) ? ? ? ? ? ? printf("."); ? ? ? ? for(int i = d-1; i >= 0; i--) ? ? ? ? ? ? printf("%c",a[i]); ? ? ? ? printf("n"); ? ? ? ? } ? ? ? ? else ? ? ? ? { ? ? ? ? ? ? printf("."); ? ? ? ? ? ? for(int i = d-1; i >= lena; i--) ? ? ? ? ? ? ? ? printf("0"); ? ? ? ? ? ? for(int i = lena-1; i >= 0; i--) ? ? ? ? ? ? ? ? printf("%c",a[i]); ? ? ? ? ? ? printf("n"); ? ? ? ? } ? ? } ? ? return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |