大数相乘
来源:互联网 发布:先序遍历的递归算法 编辑:程序博客网 时间:2024/05/21 10:49
按照正常的计算规则,先用一个数组保存每两位相乘的结果,这里先不进位!等到两个数的所有的位数都计算完毕的时候,在遍历一遍结果数组,使得低位向高位进位!最后将结果进行翻转!
/*使用数组解决大数相乘的问题*/#include <iostream>#include <string.h>#include <stdlib.h>#include <stdio.h>#define MAX 1000using namespace std;char * multyplus(char *s1,char *s2,int l1,int l2){ int k; int i,j; int array[MAX]; char *result = new char[MAX];//在调用函数中,使用new分配的内存,它的生存周期为整个函数,而不是局部的函数! memset(array,-1,sizeof(array)); for(i=0;i<l1;i++) { k=i; for(j=0;j<l2;j++) { if(array[k]==-1) array[k++]=(s1[i]-48)*(s2[j]-48);//需要注意的是,字符和数字的区别 else array[k++]+=(s1[i]-48)*(s2[j]-48); } } //处理进位 for(k=0;;k++) { array[k+1]+=array[k]/10; array[k]=array[k]%10; if(array[k+1]==-1) break; } //进行转换 for(i=k,j=0;i>=0;i--,j++) { result[j]=array[i]+48; } result[j]='\0'; return result;}int main(){ char s1[20],s2[20],*res; char temp; cout << "~~~~~请输入两个数,中间以空格隔开~~~~~" <<endl; scanf("%s",s1); scanf("%s",s2); //字符串翻转,使得以0开始的为最低位 int l1=strlen(s1); int l2=strlen(s2); for(int i=0;i<l1/2;i++) { temp=s1[i]; s1[i]=s1[l1-1-i]; s1[l1-1-i]=temp; } for(int i=0;i<l2/2;i++) { temp=s2[i]; s2[i]=s2[l2-1-i]; s2[l2-1-i]=temp; } cout<<s1<<' '<<s2<<endl; if(l1>l2) res=multyplus(s1,s2,l1,l2); else res=multyplus(s2,s1,l2,l1); cout<<"使用大数运算进行运算得到的结果:"; cout<<res<<endl; cout<<endl<<endl; cout<<"用计算机直接运算的结果:"; int num1=atoi(s1); int num2=atoi(s2); cout<<num1*num2<<endl; return 0;}
0 0
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- Struts2请求处理流程
- javaEE 分页选择
- Android应用经典主界面框架之一:仿QQ (使用Fragment, 附源码)
- Qt控件的使用
- JQuery 放大镜
- 大数相乘
- QT UI文件生成.h .cpp 的方法
- struts中获取request和session对象
- 文本编辑器CKEditor使用
- 利用Pocket阅读墙外博客
- C# 取字符串像素宽度
- Qt 模仿QQ截图 动态吸附直线
- 杂七杂八
- yum命令安装rzsz命令