2018EOJ校赛 A. 浮点数模运算(精度)


       题目链接:https://acm.ecnu.edu.cn/contest/73/problem/A/

       这道题感觉很巧妙,用java的话挺好写的,但是需要用BigDecimal去写,也没有保留小数就能AC了。然后用C++的话,就是先输入两个字符串,然后把这两个字符串转换成long long型,然后进行取模运算,最后再转成字符串输出,虽然不知道这么写出来的结果对不对,但是能AC....


AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#define ll long long
using namespace std;
ll a,c,b;
string str1,str2,str3;

int main()
{
	cin>>str1>>str2;
	int len1 = str1.length();
	int len2 = str2.length();
	a = b = 0;
	for(int i=0;i<len1;i++){
		if(str1[i] == '.')continue;
		a = a * 10 + (str1[i] - '0');
	}
	for(int i=0;i<len2;i++){
		if(str2[i] == '.')continue;
		b = b * 10 + (str2[i] - '0');
	}
	// cout<<a<<' '<<b<<endl;
	c = a % b;
	if(c == 0){
		printf("0.000000000\n");
	}
	else{
		for(int i=0;i<9;i++){
			str3 += (c % 10) + '0';
			c /= 10;
		}
		str3 += '.';
		while(c){
			str3 += (c % 10) + '0';
			c /= 10;
		}
		int len = str3.length();
		for(int i=len-1;i>=0;i--){
			printf("%c",str3[i]);
		}
		printf("\n");
	}
	return 0;
}


JAVA代码:

import java.io.*;
import java.util.*;
import java.math.*;

public class Main {
	public static void main(String [] args) {
		Scanner cin = new Scanner(System.in);
		BigDecimal a = cin.nextBigDecimal();
		BigDecimal b = cin.nextBigDecimal();
		BigDecimal c = a.remainder(b);
		System.out.println(c);
	}
}

猜你喜欢

转载自blog.csdn.net/charles_zaqdt/article/details/80312387