算法提高 P1001
2017-02-21 19:18
204 查看
算法提高 P1001
时间限制:1.0s 内存限制:256.0MB
当两个比较大的整数相乘时,可能会出现数据溢出的情形。为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法。具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果存储在另一个字符串当中(长度不会超过16位),最后把这个字符串打印出来。例如,假设用户输入为:62773417和12345678,则输出结果为:774980393241726.
输入:
62773417 12345678
输出:
774980393241726
问题分析:其实就是模拟乘法的过程,但是因为数太大,所以这里用字符型数组来表示,但是这里有个主意点就是循环中,a[i]与b[j]相乘的结果应该储存在ans[i+j+1]而不是ans[i+j],因为这里ans[0]是留给最高位进位的情况,如果相乘结果直接存在ans[i+j]中,若吗最高位进位了,那么就会产生错误,若有ans[0]留一位,就可以存储。同时这里由于模拟的原因,所以比如:乘数分别为0,1234,那么结果就是0000,显然显示一个零就可以,这里有两种判断方法,一个很基础判断其中一个为0而另一个不为0即可,另一个判断方法就是判断ans[1]不为0,因为m位数和n为数都不为0相乘最少也是m+n-1位数,而ans[1]就是第m+n-1位数,所以如果ans[1]==0,那么肯定整个数为0,这时输出0即可
时间限制:1.0s 内存限制:256.0MB
当两个比较大的整数相乘时,可能会出现数据溢出的情形。为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法。具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果存储在另一个字符串当中(长度不会超过16位),最后把这个字符串打印出来。例如,假设用户输入为:62773417和12345678,则输出结果为:774980393241726.
输入:
62773417 12345678
输出:
774980393241726
问题分析:其实就是模拟乘法的过程,但是因为数太大,所以这里用字符型数组来表示,但是这里有个主意点就是循环中,a[i]与b[j]相乘的结果应该储存在ans[i+j+1]而不是ans[i+j],因为这里ans[0]是留给最高位进位的情况,如果相乘结果直接存在ans[i+j]中,若吗最高位进位了,那么就会产生错误,若有ans[0]留一位,就可以存储。同时这里由于模拟的原因,所以比如:乘数分别为0,1234,那么结果就是0000,显然显示一个零就可以,这里有两种判断方法,一个很基础判断其中一个为0而另一个不为0即可,另一个判断方法就是判断ans[1]不为0,因为m位数和n为数都不为0相乘最少也是m+n-1位数,而ans[1]就是第m+n-1位数,所以如果ans[1]==0,那么肯定整个数为0,这时输出0即可
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; int main() { char a[8],b[8]; char ans[16]; int len1,len2; scanf("%s%s",a,b); len1 = strlen(a); len2 = strlen(b); memset(ans,0,sizeof(ans)); for(int i=len1-1; i>=0; i--) for(int j=len2-1; j>=0; j--) { ans[i+j+1] += (a[i]-48)*(b[j]-48); if (ans[i+j+1]>9) { ans[i+j] += ans[i+j+1]/10; ans[i+j+1] %= 10; } } if ((len1==1 && a[0]=='0') || (len2==1 && b[0]=='0')) printf("0"); /* if(0 == mulNum[1] ) //说明整体为0 cout<<"0"<<endl; */ else { if (ans[0]!=0) printf("%d",ans[0]); for(int i=1; i<len1+len2; i++) printf("%d",ans[i]); } printf("\n"); return 0; }
相关文章推荐
- 算法提高 ADV-197 P1001
- 算法提高 P1001
- 算法提高P1001
- 2016蓝桥杯算法提高——P1001(大数乘法)
- 算法提高 P1001
- 算法笔记_097:蓝桥杯练习 算法提高 P1001(Java)
- 算法提高 P1001
- 算法提高 P1001
- 算法提高 P1001 (大数相乘)
- 算法提高 P1001(Java解题)
- 蓝桥杯 ADV-197 算法提高 P1001
- 算法提高 P1001 (大数乘法)
- 算法提高 P1001
- 算法-蓝桥杯-算法提高 P1001(JAVA)
- 蓝桥杯 ADV-197 算法提高 P1001
- 算法提高 P1001(模拟)
- 算法提高 P1001
- 算法提高 P1001
- 算法提高 P1001
- 蓝桥杯 算法提高VIP 素数求和(java)