书山有径勤为路>>>>>>>>

<<<<<<<<学海无涯苦作舟!

大整数乘法——简单

写这个程序的时候有三个关键点,

知道了这个,你Win, Or, 你Lose!

我将它们一一注释在了代码中。

 

复制代码
View Code
#include "iostream"
#include "cstring"
#include "string"
using namespace std;
#define maxlen 200
int a[maxlen];
int b[maxlen];
int c[2*maxlen+1]; //这个地方也是个关键,一定要多加一个正数,不然错
string s1;
string s2;
int main()
{
while(cin>>s1>>s2)
{
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
int lena, lenb;
lena = s1.length();
lenb = s2.length();
for(int i=lena-1, j=0; i>=0; i--) a[j++] = s1[i]-'0';
for(int i=lenb-1, j=0; i>=0; i--) b[j++] = s2[i]-'0';
for(int i=0; i<lena; i++)
for(int j=0; j<lenb; j++)
c[i+j] += a[i]*b[j]; //这里是+=,这个是相当关键的,因为要多次相乘嘛
for(int i=0; i<maxlen*2; i++) //上限就是lena+lenb了,而不是lena*lenb
{
if(c[i]>=10)
{
c[i+1] += c[i]/10;
c[i] %= 10;
}
}
bool flag = false;
for(int i=maxlen*2; i>=0; i--) //上限就是lena+lenb了,而不是lena*lenb
{

if(flag) cout<<c[i];
else if(c[i])
{
cout<<c[i];
flag = true;
}
}
if(!flag) cout<<"0"<<endl;
cout<<endl;
}
return 0;
}
复制代码

posted on   More study needed.  阅读(312)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
< 2011年10月 >
25 26 27 28 29 30 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

书山有径勤为路>>>>>>>>

<<<<<<<<学海无涯苦作舟!

点击右上角即可分享
微信分享提示