西电复试之——真题2008E

西电复试之——真题2008E

精度计算问题
输入:每组数据占一行,用一对数据表示,第一个数据是R(含小数点共六位),第二个数据是阶数n
输出:输出计算结果

#include<iostream>
#include<cstdio>
#include<string>

using namespace std;
//函数用于计算x的n次方,存入a[]数组
void f(int a[], int x, int n) {
	int temp = 0;
	while (n--) {
		for (int i = 0; i < 400; i++) {
			temp += a[i] * x;
			a[i] = temp % 10;
			temp /= 10;
		}
	}
}

int main() {
	char a[10];
	int n = 0;//阶
	int dot = 0;//存点的位置
	while (gets_s(a)) {
		//找小数点的位置
		for (dot = 0; a[dot] != '.'; dot++);
		//找到最后一个非零的位置
		int q = 0;
		for (q = 5; a[q] == '0'; q--);
		//记录小数点后的有效位置
		int num = q - dot;

		//将输入的小数转化为整数
		int sum = 0;
		for (int i = 0; i <= q; i++) {
			if (a[i] >= '0' && a[i] <= '9')
				sum = sum * 10 + a[i] - '0';
		}
		if (sum == 0) {
			cout << "0" << endl;
			continue;
		}
		//计算阶数
		if (a[7] == ' ')
			n = a[8] - '0';
		else
			n = (a[7] - '0') * 10 + a[8] - '0';
		//需要计算的小数点后位数
		num *= n;
		//保存结果
		int ans[400] = { 1 };
		f(ans, sum, n);
		int last = 0;
		//找到输出的起始位置
		for (last = 399; ans[last == 0 && last != num - 1]; last--);
		for (; last != -1; last--) {
			if (last == num - 1) {
				cout << ".";
			}
			cout << ans[last];
		}
		cout << endl;
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值