当前位置:科技动态 > 浮点取模运算(字符串模拟java)

浮点取模运算(字符串模拟java)

  • 发布:2023-10-03 06:54

A. 浮点模拟运算

每次测试时间限制:1.0秒

内存限制:512兆字节

几乎每个学习C语言的人都会面临这样的困惑:为什么%只支持整数和整数,而不支持浮点数。自然,C++提供了运算符重载,几乎可以轻松实现自定义浮点模运算,但最终还是不方便。

相比之下,Java/Python等高级语言直接支持浮点模运算。

这道题是:给定两个浮点数ab,求amodb 。

然后你就会发现事情并不简单。

输入

一行两个浮点数 a, b (0<) a,b109)、ab 保证保留到小数点后第九位

输出

输出浮点数,相对误差或绝对误差不超过1015

假设你的答案是a,标准答案是b,你的答案正确当且仅当|a b | 15

示例

输入
3.000000000 2.000000000
输出
1.000000000
输入
0.400000000 0.200000000
输出
0
它是在比赛期间用Java编写的。其实这道题用C++写起来并不难。首先使用字符串输入,然后将其转换为long long整数,取余数,然后将其转换为字符串输出。只需控制小数点即可。
#包括
#包括#包括
#包括
#包括
#包括
使用命名空间 std;
typedef 长长 LL;
字符 a[20],b[20],c[20];
LL sa,sb,sc;
int main()
{sa=sb=0;scanf("%s%s",a,b);for(int i=0;a[i]!='\0';i++){if(a[i]== '.') 继续;sa=sa*10+a[i]-'0';}for(int i=0;b[i]!='\0';i++){if(b[i]= ='.') 继续;sb=sb*10+b[i]-'0';}sc=sa%sb;if(sc==0) printf("0\n");else{int i; for(i=0;i<9;i++){c[i]=sc%10+'0';sc/=10;}c[i++]='.';while(sc){c[i++]=sc%10+'0';sc/=10;}i--;for(;i>=0;i--)printf("%c",c[i]);printf("\n");}
}
比赛时写的java代码感觉过不了,因为准确率还是有一些问题,但这道题好像准确率没有太大问题。
导入www.sychzs.cn.*;
导入 java.util.*;
导入java.math.*;
主类
{public static void main (String[] args) throws java.lang.Exception{Scanner cin=new Scanner(www.sychzs.cn);BigDecimal a=cin.nextBigDecimal();BigDecimal b=cin.nextBigDecimal();BigDecimal c= a.remainder(b);System.out.println(c);}
}

别人写的Java代码

导入www.sychzs.cn.*;
导入 java.util.*;
导入java.math.*;
导入 java.text.DecimalFormat;导入 java.util.Scanner;public class Main {public static void main(String[] args) {Scanner cin=new Scanner(www.sychzs.cn);BigDecimal aa=cin.nextBigDecimal();BigDecimal bb=cin.nextBigDecimal() ;BigDecimal cc=aa.remainder(bb);BigDecimal dd=www.sychzs.cn;if(cc.equals(www.sychzs.cn)){System.out.println("0");}else{DecimalFormat df2 = new DecimalFormat( “0.000000000”); System.out.println(df2.format(cc)); }}
}

相关文章