题解 P6745 『MdOI R3』Number
前言
不知道是不是正解但是觉得挺好理解。
科学计数法
将一个数表示为\(a\times 10^x\) 的形式。其中\(a\leq10\),\(x\) 为整数。
\(\sf Solution\)
其实这题可以看成\(10^k\) 与\(x\) 两个大数相加。所以呢,就有了高精的写法。
- \(k\) 的处理
我们都知道\(10^k\) 其实就是\(1000.......0000\)(\(1\) 后面\(k\) 个\(0\) )
所以只要\(a_{k+1}\gets1\) 。
- \(x\) 的处理
就是一个裸的高精加了啦。
\(\sf Code\)
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
string s;
int k,len;
int a[100001];
int main()
{
scanf("%d",&k);
cin>>s;
for(int i=s.length()-1;i>=0;--i)
a[++len]=s[i]-'0';//转换成数字
a[k+1]++;//处理k
len=max(len,k+1);//获取位数
for(int i=1;i<=len;++i)
if(a[i]>9)
a[i+1]++,a[i]%=10;//处理进位
if(a[len+1])
++len;//最高位的处理
for(int i=len;i>=1;--i)
printf("%d",a[i]);//倒序输出结果
return 0;
}