贴代码
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
//字符串扩大x倍
string mul(string b,int x,bool f) //f为标记符号,若为0则个位,若为1为十位
{
if (x==0) return "0";
int l=b.length()-1;
int next=0;
for (int i=l;i>=0;i--)
{
b[i]=((b[i]-48)*x)+48+next;
if (b[i]-48>=10)
{
next=(b[i]-48)/10;
b[i]=(b[i]-48)%10+48;
}
else next=0;
}
if (next!=0)
{
char c=next+48;
b=c+b;
}
//cout<<b<<" mul\n";
if (f==0)
return b;
else return b+'0';
}
//两字符串相加
string add(string a,string b)
{
bool flag=false;
int l1=a.length();
int l2=b.length();
int max;
if (l1<l2)
{
for (int i=l2-l1;i>0;i--)
a=' '+a;
max=l2;
}
else
{
for (int i=l1-l2;i>0;i--)
b=' '+b;
max=l1;
}
int next=0;
for (int i=max-1;i>=0;i--)
{
if (a[i]==' ' || b[i]==' ') a[i]+=16; //空格的ASCII码为32,与0相差16
a[i]=a[i]-48+b[i]+next;
if (a[i]-48>=10)
{
next=1;
a[i]=a[i]-10;
}
else next=0;
}
if (next!=0)
a='1'+a;
//cout<<a<<" add\n";
return a;
}
int main()
{
int n;
cin>>n;
string s="1";
for (int i=2;i<=n;i++)
{
string b="1";
for (int j=1;j<=i;j++)
b=add(mul(b,j/10,1),mul(b,j%10,0));
s=add(s,b);
}
cout<<s<<endl;
}
为什么数字一大就会出现乱码, 比如输入48, 输出126781637985540517671726433732557313925000316ェ誖6珊0420940313
首尾的答案没差异,中间乱码怎么解决?
谢谢大佬指点