小数化分数(求大哥帮忙看看孩子哪里错了)

发布时间:2021-04-17 18:12:52
贴主:CST20034
热度:3
正在讨论:P3220 - 小数化分数 题目传送门

CST20034 2021-04-17

#include<iostream>

#include"string"

#include"math.h"

using namespace std;

int measure(long long int x, long long int y);

int main()

{

int n;

cin >> n;

string a;

for (int i = 0; i < n; i++)

{

cin >> a;

int x;

x = a.size();

int x1 = x - 2;

long long sum = 0;

for (int i = 2; i < x; i++)

{

sum = sum + (a[i] - '0') * pow(10, x - i - 1);

}

long long int b = pow(10, x1);

long long int z = measure(sum, b);

cout << sum / z << "/" << b / z << endl;

}

return 0;

}



int measure(long long int x, long long int y)

{

long long int z = y;

while (x % y != 0)

{

z = x % y;

x = y;

y = z;

}

return z;

}


(0)

风行 2021-04-17

记得都要开long long 

(0)

Eriri 2021-04-17

这个字符串转整形的方法,sum在16位之后会出错,sum = sum + (a[i] - '0') * pow(10, x - i - 1),pow的返回类型是double,double只有16有效位数。可以学习使用stringstream的方法将string类字符串转整形。

  使用stringstream时先添加头文件#include<sstream>

stringstream ss//创建一个字符串流ss

ss<<a//把字符串a的值传到ss字符串流

ss>>sum//把字符串流ss的值传递给长整型sum


(0)

Copyright 2016 - 2024 XUJC ACM Team
闽ICP备2020022076号-1