奇怪的计算器
计科专业的小明最近得到一个任务,去修理一台奇怪的计算器,这个计算器输出的结果是颠倒的,比如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;
}