题解 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;
}
posted @ 2020-08-11 14:54  Callous_Murder  阅读(367)  评论(0编辑  收藏  举报