前言
不知道是不是正解但是觉得挺好理解。
科学计数法
将一个数表示为(a imes 10^x) 的形式。其中(aleq10),(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;
}