首页 > 试题广场 >

特殊的科学计数法

[编程题]特殊的科学计数法
  • 热度指数:587 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
已知,引力常数,普朗克常数 ,阿伏伽德罗常数为.....这些数据,看起来如此的繁琐,实际上,我们为了简化,有时候我们需要写他们的科学计数法的方式,比如,上述三个数,我们会写成6.7 * 10 ^ -11,6.6 * 10^-34, 6.0 * 10 ^ 23。
现在给你一个正整数,请你转换成a.b * 10 ^ c的形式。确保数值(a.b)四舍五入到小数点后一位。此外还应满足

输入描述:
输入的第一行给出正整数
{100 \leq N \leq 10^{100000}}


输出描述:
转换为a.b * 10 ^ c的形式。
示例1

输入

299792458

输出

3.0*10^8
示例2

输入

602214129000000000000000

输出

6.0*10^23
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String N = sc.nextLine().trim();
        int L = N.length();

        int c = L - 1;
        char a = N.charAt(0);
        char b = (L >= 2) ? N.charAt(1) : '0';
        char d3 = (L >= 3) ? N.charAt(2) : '0';

        // 四舍五入处理
        boolean roundUp = (d3 >= '5');
        int intA = a - '0';
        int intB = b - '0';

        if (roundUp) {
            intB++;
            if (intB == 10) {
                intB = 0;
                intA++;
                if (intA == 10) {
                    // 特例:99.9... -> 100
                    intA = 1;
                    intB = 0;
                    c++;
                }
            }
        }

        // 输出
        System.out.printf("%d.%d×10^%d\n", intA, intB, c);
    }
}

发表于 2026-04-02 20:57:05 回复(0)
import sys

n = sys.stdin.readline().strip()
a = int(n[0])
b = int(n[1]) + (len(n) > 2 and int(n[2]) > 4)
c = len(n) - 1
while a > 9 or b > 9:
    if b > 9:
        a += 1
        b = 0
    else:
        a = 1
        b = 1 if b > 4 else 0
        c += 1
print(str(a) + "." + str(b) + "*10^" + str(c))

发表于 2026-03-26 15:18:11 回复(0)