C语言长整型相乘
2017-09-24 21:47
204 查看
思路
用数组strA,strB存储数字,将两个大数对应位置(i、j)上的数相乘,乘积直接放在数组strC的第(i+j)位,待所有位置上的数都相乘后,对strC进行进位。#include<iostream> #include<cstring> using namespace std; int main(){ int strA[4000],strB[4000],strC[4000]={0}; int lenA=0,lenB=0,lenC=0,i,j,t=0,flagA=1,flagB=1; char str[40000]; //输入第一个数 cout<<"输入第一个数,回车结束输入:"; gets(str); for(i=0;i<strlen(str);i++){ if(str[i]=='-'){ flagA=-1; continue; } strA[t++]=str[i]-'0'; } lenA=t; //输入第二个数 cout<<"输入第二个数,回车结束输入:"; gets(str); for(i=0,t=0;i<strlen(str);i++){ if(str[i]=='-'){ flagB=-1; continue; } strB[t++]=str[i]-'0'; } lenB=t; //两数相乘 for(int i=lenA-1,p=0;i>=0;i--,p++){ for(int j=lenB-1,k=0;j>=0;j--,k++){ strC[k+p]+=strA[i]*strB[j]; lenC=k+p+1; } } //进位 int newLen=0; for(int i=0;i<lenC;i++){ if(strC[i]>=10){ int n=strC[i]; strC[i]=n%10; n=n/10; newLen=i; int t=i+1; while(n){ strC[t]+=n%10; n=n/10; newLen=t; t++; } } if(newLen<i) newLen=i; } cout<<"乘积:"; if(strC[newLen]==0){ cout<<"0"<<endl; return 0; } //判断符号 if(flagA*flagB==-1) cout<<"-"; //输出乘积 for(int i=newLen;i>=0;i--){ cout<<strC[i]; } return 0; }
相关文章推荐
- C语言的整型溢出问题(未看)
- C语言大数相乘A × B problem
- c语言实现字符串转换为整型
- C语言进阶:整型提升
- C语言中字符串与整型,浮点型之间的转换
- 下午整理的 素数打表 大数与整型相乘 求余模板
- C语言基本数据类型:整型(int)用法详解
- 【转】C语言中整型运算取Ceiling问题
- C语言 实现浮点数的整型强制转化
- 【C语言常用技巧】字符串整型转换
- 20100601--C语言中的字符型与整型
- C语言的数据类型→整型数据
- C语言 64位整型的printf格式控制
- C语言整型常量的表示方法(转自百度整理)
- 搞透C语言整型数据范围表示
- 整型数组里只出现一次的数字--[c语言笔试题]
- 【c语言】把一个长整型给一个字符指针
- C语言的整型常量与实型常量
- 【C语言】写冒泡排序可以排序一个整型数组。
- C语言中整型与指针之间转换的注意点