#include<iostream> using namespace std; char *multi(char *p,char *q)//大乘法,仔细想想,用笔写写就可以看懂了 { int maxLen,minLen,i,j; char *min,*max; int *a = new int[100]; if(strlen(p) > strlen(q)) { maxLen = strlen(p); minLen = strlen(q); min = q; max = p; } else { maxLen = strlen(q); minLen = strlen(p); min = p; max = q; } memset(a,100);//将字符串置0 int length = maxLen; char *c = new char[50]; for(i = minLen - 1 ; i >= 0 ; i--) { for(j = 0 ; j < maxLen ; j++) { a[j] += (max[j] - '0') * (min[i] - '0');//将结果存放在a[j]中 } if(i > 0) { for(int k = length - 1 ; k >= 0 ; k--)//如果i>0则说明乘数前面还有位数,则求的结果要向有移动一位 { a[k + 1] = a[k]; } a[0] = 0; length ++; } } for(i = length - 1 ; i > 0 ; i--) { a[i - 1] += a[i] / 10;//满十进一 a[i] %= 10; } if(a[0] > 9)//当a[0] > 9的时候则说明位数不够 { int temp = a[0]; a[0] %= 10; temp /= 10; while(temp) { for(i = length - 1 ; i >= 0 ; i--)//补齐位数 a[i + 1] = a[i]; a[0] = temp % 10; length ++; temp /= 10; } } for(i = 0; i < 21 - length; i++)//如果结果不足21位,往前补0 c[i] = '0'; int k = 0; for(i = 21 - length; i < 21; i++) c[i] = a[k++] + '0'; c[i] = '\0'; return c; } void main() { char* num = multi("22343454533","3234354454"); int i; for(i = 0; i< strlen(num); i++) if(num[i] == '0') continue; else break; num = &num[i]; cout<<num<<endl; } /* 72266651686555039982 */
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。