• 奇怪的计算器


    奇怪的计算器

    计科专业的小明最近得到一个任务,去修理一台奇怪的计算器,这个计算器输出的结果是颠倒的,比如123它输出321,遇到小数点的时候,整数和小数部分分别是颠倒的,比如123.456显示成321.654,请编写一个程序,将输出的结果修正。
    输入
    首先输入一个整数N,然后输入N行,每一行是一个计算器的输出。
    输出
    依次输出每个值正确的值
    输入示范
    4
    2.879
    13410.41
    2.0005
    100
    输出示范
    2.978
    1431.14
    2.5
    1

    方法一:

    #include <string>
    #include <stdio.h>
    #include<math.h>
    using namespace std;
    int reversed(int n) {       //数字倒叙
        int y = 0;
        while (n) {
            y = y * 10 + n % 10;
            n /= 10;
        }
        return y;
    }
    int main() {
        double num;
        int n, integer/*整数部分*/, decimals = 0/*小数部分*/;
        string str;
        scanf("%d", &n);
        for (int i = 0; i < n; i++) {
            scanf("%lf", &num);
            integer = int(num);
            str = to_string(num);                       //避免double的精度问题,还需要用到字符串    
            while (str[str.length() - 1] == '0')        //弹出末尾的0
                str.pop_back();
            if (str[str.length() - 1] == '.')           //字符最后一位是点,说明没有小数
                decimals = 0;
            else
                decimals = stoi(str.substr(str.find('.') + 1, string::npos));
            printf("%d", reversed(integer));
            if (decimals != 0)
                printf(".%d", reversed(decimals));
            printf("
    ");
        }
        return 0;
    }

    方法二: 

    #include <string.h>
    #include <stdio.h>
    #include<math.h>
    int main() {
        int n, point;
        char str[1000];
        char ch;
        scanf("%d", &n);
        for (int i = 0; i < n; i++) {
            scanf("%s", &str);
            point = 0;
            for (int j = 0; j < strlen(str); j++)
                if (str[j] == '.')
                    point = j;
            for (int j = 0; j < point / 2; j++) {   //颠倒整数部分
                ch = str[j];
                str[j] = str[point - j - 1];
                str[point - j - 1] = ch;
            }
            for (int j = 0; j < (strlen(str) - point - 1) / 2; j++) { //颠倒小数部分
                ch = str[point + j + 1];
                str[point + j + 1] = str[strlen(str) - j - 1];
                str[strlen(str) - j - 1] = ch;
            }
            while (str[0] == '0') {         //去除整数前面的0
                for (int i = 0; i < strlen(str); i++) {
                    str[i] = str[i + 1];
                }
            }
            for (int i = strlen(str) - 1; ; i--)        //去除小数后面多余的0
                if (str[i] != '0') {
                    str[i + 1] = '';
                    break;
                }
            printf("%s
    ", str);
        }
        return 0;
    }
  • 相关阅读:
    apue学习笔记(第一章UNIX基础知识)
    批处理之发布新版本
    在Vista或Windows 7系统上安装Sharepoint 2007
    SharePoint Server 2007 简体中文下载
    sql连接字符串的方法
    共享本地的无线网络
    FastReport报表
    C# 语音识别(文字to语音、语音to文字)
    C#调用脚本语言(三)-- IronJS 与 IronLua 简单方法性能比较
    VS2010中出现无法嵌入互操作类型
  • 原文地址:https://www.cnblogs.com/F-itachi/p/9974328.html
Copyright © 2020-2023  润新知