题解 P6745 『MdOI R3』Number

前言

不知道是不是正解但是觉得挺好理解。

科学计数法

将一个数表示为(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;
}
原文地址:https://www.cnblogs.com/CM-0728/p/13475610.html