针对CSP-J/S的每日一练:Day9

一、审题

题目描述

众所周知,光年是一种距离单位,1光年=9460730472580800米。今年5月6日,天文学家在最新一期《天文学与天体物理学》杂志上称,他们发现了一个距离地球只有1000光年的黑洞,这是迄今为止在肉眼可见的恒星系统中发现的距离地球最近的黑洞。即该黑洞距离地球只有9460730472580800米。为了能直观的表现出天体之间的庞大距离,请你设计一个换算器,输入光年数,输出对应的米数。

输入描述

1行。包含一个整数n,代表光年数。

输出描述

1行,即n光年的米数。

样例1

输入

1

输出

9460730472580800

样例2

输入

2

输出

18921460945161600

提示

对于100%的数据,1<=n<=10000000。

二、思路提示

        按照C++高精度乘法的【高精度数 × 低精度数】模块,我们使用n来存储低精度数,a_int[]来存储高精度数。

  • 遍历int_a,先在ans[]数组中存储真实的计算结果,然后提取进位,并且在ans[]数组中只保留个位。
  • 在逆序输出之前,进行最高位的处理(如果进位不是0,那么要在ans[]数组中先存储进位,然后将进位 ÷ 10,因为进位有可能是一个多位数)。

三、代码实践

#include 
#include 
using namespace std;

int main()
{
    // 输入光年数
    int n;
    cin >> n;
    
    // 转换进率
    char a_str[1005] = "9460730472580800";
    int a_int[1005] = {};
    int len_a = strlen(a_str);
    for (int i = 0; i <= len_a-1; i++)
    {
        a_int[len_a-i-1] = a_str[i] - 48;
    }
    
    // 计算结果
    int ans[1005] = {};
    int len_ans = len_a;
    int in = 0;
    for (int i = 0; i <= len_ans-1; i++)
    {
        ans[i] = a_int[i] * n + in;
        in = ans[i] / 10;
        ans[i] %= 10;
    }
    
    // 去前导0
    while (in)
    {
        ans[len_ans] = in % 10;
        in /= 10;
        len_ans++;
    }
    
    // 正常倒序输出
    for (int i = len_ans-1; i>= 0; i--)
    {
        cout << ans[i];
    }
	return 0;
}

你可能感兴趣的:(算法)