大数相乘 系统管理员 2022-08-11 20:29 193阅读 0赞 无意中看到一个华为面试题,使用代码计算[1234567891011121314151617181920\*2019181716151413121110987654321][1234567891011121314151617181920_2019181716151413121110987654321]。自己搞了一上午。写的真烂,贴上来,大家笑话去吧。 整体思想很简单,就是用字符数组代替数值,小学乘法的思想用在程序里。学好数学的重要性,程序再牛逼,也得先会数学。 #include<iostream> using namespace std; char bigA[100]; char bigB[100]; static char bigResult[200]; static int sum = 0; void merge(char temp[]); void printResult(); void cheng(char bigA[],char bigB[]){ //大数A的从低位到高位分割 for(int i=strlen(bigA)-1; i>= 0; i--){ int chengA = bigA[i] - 48;//对应大数A的每一位单位乘数 //大数B从低位到高位分割 for(int j=strlen(bigB)-1; j>= 0;j--){ int chengB = bigB[j] - 48;//对应大数B的每一位单位乘数 int result = chengA * chengB; if(result > 9){//对应的就是结果是两位 int count = strlen(bigA)-1 - i + strlen(bigB)-1 - j + 2; char temp[100]; temp[0]=49; temp[1]=result-10+48; for(int n = 2; n < count; n++){ temp[n]='0'; } temp[count]='\0'; merge(temp); //cout<<temp; }else{//对应就是结果为1位 int count = strlen(bigA)-1 - i + strlen(bigB)-1 - j + 1; char temp[100]; temp[0]=result+48; for(int n = 1; n < count; n++){ temp[n]='0'; } temp[count]='\0'; merge(temp); //cout<<temp; } //printResult(); } } } void init(){ for(int i = 0; i<200; i++){ bigResult[i]='0'; } bigResult[200]='\0'; } //bigResult就是从低位到高位记录的 void merge(char temp[]){ int k=0; int jin = 0; for(int i = strlen(temp)-1; i>=0; i--){ int jiaA = bigResult[k] - 48; int jiaB = temp[i] - 48; int result = jiaA + jiaB + jin - 10; if(result >= 0){ bigResult[k]=result+48; jin = 1; }else{ bigResult[k]=result+10+48; jin = 0; } k++; } while(jin != 0){ int jia = bigResult[k]-48; int result = jia + jin - 10; if(result >=0){ bigResult[k]=result+48; jin = 1; }else{ bigResult[k]=result+10+48; jin=0; } k++; } sum = sum > k ? sum : k; } //输出结果 void printResult(){ //cout<<sum<<endl; cout<<"The Result: "; for(int i = sum-1; i >= 0 ; i--){ cout<<bigResult[i]; } cout<<endl; } int main(){ //cout<<sizeof(char)<<endl; //char*temp = (char*)malloc(sizeof(char)*1); //cout<<strlen(temp)<<endl; init(); cin>>bigA; cin>>bigB; cheng(bigA,bigB); printResult(); system("pause"); } [1234567891011121314151617181920_2019181716151413121110987654321]: http://blog.csdn.net/daliaojie/article/details/8078694
相关 大数相乘 void mul(string a, string b) { int max = 0; int c[1000] = {0}; in r囧r小猫/ 2022年12月04日 08:47/ 0 赞/ 21 阅读
相关 大数相乘 一、背景 最近在看算法的时候发现了一个问题,我们都知道方法的形参是要指定类型的,假如有以下方法 public int example(int a,int b){ 傷城~/ 2022年09月30日 13:55/ 0 赞/ 208 阅读
相关 大数相乘 参考地址:[http://www.cnblogs.com/heyonggang/p/3599857.html][http_www.cnblogs.com_heyonggang_ 悠悠/ 2022年08月20日 06:29/ 0 赞/ 189 阅读
相关 大数相乘 [用分治法实现大数乘法,加法,减法(java实现)][java] 大数乘法即多项式乘法问题,求A(x)与B(x)的乘积C(x),朴素解法的复杂度O 小咪咪/ 2022年08月19日 15:12/ 0 赞/ 184 阅读
相关 大数相乘 无意中看到一个华为面试题,使用代码计算[1234567891011121314151617181920\2019181716151413121110987654321][123 系统管理员/ 2022年08月11日 20:29/ 0 赞/ 194 阅读
相关 大数相乘 题目:请使用代码计算1234567891011121314151617181920\2019181716151413121110987654321。 答: ![复制代码][ Bertha 。/ 2022年08月05日 08:54/ 0 赞/ 205 阅读
相关 大数相乘 在这之前我们先来了解一下Java 中每种基本数据类型所占存储空间的大小。其中 1Byte = 8bit。 <table> <tbody> <tr> <th> 朱雀/ 2022年06月02日 02:36/ 0 赞/ 251 阅读
相关 大数相乘 设X和Y是n位的二进制整数,现在要计算X\Y的结果 将a和b分为两段,每段长均为总长的1/2, ![20180329214901958][] 拼搏现实的明天。/ 2022年05月28日 05:06/ 0 赞/ 214 阅读
相关 大数相乘 题目 编写两个任意位数的大数相乘的程序,给出计算结果。比如: > 题目描述: 输出两个不超过100位的大整数的乘积。 > 输入: 输入两个大整数,如1234567 今天药忘吃喽~/ 2022年05月23日 11:23/ 0 赞/ 335 阅读
相关 大数相乘 def fun(num1,num2): num1 type str num2 type str a = map(int, 落日映苍穹つ/ 2021年10月24日 01:48/ 0 赞/ 329 阅读
还没有评论,来说两句吧...