求调,帮看一下哪里错了,纠正一下
  • 板块学术版
  • 楼主_auto
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/2/23 22:44
  • 上次更新2024/2/24 10:27:28
查看原帖
求调,帮看一下哪里错了,纠正一下
889733
_auto楼主2024/2/23 22:44

小Z老师最近在玩一个有意思的游戏,他手上有两个很大的数 a 和 b 。对于 a ,他会把它翻转过来得到一个数 a′ ,然后把 a′ 拼接在 a 的后面得到一个新的数 A ,例如对于 123 这个数来说,翻转过来是 321 ,拼起来之后就是 123321 ;对于 100 这个数,翻转过来是 001 ,拼起来之后就是 100001 。对于 b ,他也会进行同样的操作,得到新的数 B 。然后,他会求出 A×B 的结果,请你帮他完成这个过程。

输入格式 共两行。

第一行,一个很大的正整数 a 。

第二行,一个很大的正整数 b 。

输出格式 仅一行,一个正整数,表示最后的结果。

样例输入 12 676 样例输出 826221396 数据范围 记 n 为 a 的位数,m 为 b 的位数。

对于 100% 的数据,保证 1≤n,m≤100,a≠0,b≠0 。

代码:


#include <bits/stdc++.h>
using namespace std;
char s[110],ans[110];
int a[110],c[210],b[210],lena,lenb,lenc,cnt;
int main()
{
	scanf("%s",s+1);
	lena=strlen(s+1),cnt=lena+1;
	for(int i=cnt,j=1;i<=lena*2;i++,j++) ans[i]=s[lena-i+1];
	for(int i=1;i<=lena;i++) a[i]=s[lena-i+1]-'0';
	for(int i=cnt;i<=lena*2;i++) a[i]=ans[i]-'0';
	scanf("%s",s+1);
	lenb=strlen(s+1),cnt=lenb+1;
	for(int i=cnt,j=1;i<=lenb*2;i++,j++) ans[i]=s[lenb-i+1];
	for(int i=1;i<=lenb;i++) b[i]=s[lenb-i+1]-'0';
	for(int i=cnt;i<=lenb*2;i++) b[i]=ans[i]-'0';
	lenb*=2,lena*=2,lenc=lena+lenb;
	for(int i=1;i<=200;i++) c[i]=0;
		for(int i=1;i<=lena;i++)
			for(int j=1;j<=lenb;j++) c[i+j-1]=c[i+j-1]+a[i]*b[j];
		for(int i=1;i<=lenc;i++)
		{
			c[i+1]=c[i+1]+c[i]/10;
			c[i]=c[i]%10;
		}
		while(c[lenc]==0&&lenc>1) lenc--;
		for(int i=lenc;i>=1;i--) cout<<c[i];
	return 0;
}

2024/2/23 22:44
加载中...