zoukankan      html  css  js  c++  java
  • uva 748 Exponentiation 浮点数乘方运算 高精度水题

    输入的前六位数表示一个小数,然后输入一个数表示几次方。要求用高精度算出结果。

    高精度水题,主要注意处理小数点,先在输入时把小数点提取出来并记录位置,用普通乘法计算出结果后由后向前计算位置添加小数点。

    代码:

    #include <cstdio>
    #include <cstring>
    
    const int maxn = 300;
    
    void Mul(char *str1, char *str2, char *str3){ 
    	int  i, j, i1, i2, tmp, carry, jj; 
    	int  len1 = strlen(str1), len2 = strlen(str2); 
    	char  ch; 
    
    	jj = carry = 0; 
    
    	for( i1=len1-1; i1 >= 0; --i1 ){ 
    		j = jj; 
    		for( i2=len2-1; i2 >= 0; --i2, ++j ){ 
    			tmp = 
    				(str3[j]-'0')+(str1[i1]-'0')*(str2[i2]-'0')+carry; 
    			if( tmp > 9 ){ 
    				carry = tmp/10; str3[j] = tmp%10+'0'; 
    			} 
    			else { 
    				str3[j] = tmp+'0'; carry = 0; 
    			} 
    		} 
    		if( carry ) { 
    			str3[j] = carry+'0'; carry = 0; ++j; 
    		} 
    		++jj; 
    	} 
    	--j; 
    	while( str3[j] == '0' && j > 0 ) --j; 
    	str3[++j] = ''; 
    	for( i=0, --j; i < j; ++i, --j ){ 
    		ch = str3[i]; str3[i] = str3[j]; str3[j] = ch; 
    	} 
    }
    
    int main() {
    	char num[maxn], res[maxn], t[maxn];
    	int n;
    	while (1) {
    		int p, tmp, i = 0;
    		while ((tmp = getchar()) != EOF && tmp != ' ')
    			if (tmp == '.')
    				p = i;
    			else{
    				t[i]= num[i] = tmp;
    				i++;
    			}
    		for (int j = i - 1; j >= 0; j--)
    			if (num[j] != '0') {
    				i = j + 1;
    				break;
    			}
    		t[i] = num[i] = '';
    		if (scanf("%d", &n) == EOF)
    			break;
    		p = (strlen(num) - p) * n;
    		getchar();
    		memset(res, '0', sizeof(res));
    		for (int i = 0; i < n - 1; i++) {
    			Mul(num, t, res);
    		//	if (i == n - 1)
    		//	   	printf("%s %s %s
    ", num, t, res);
    		//printf("hehe
    %s
    ", res);
    			if (i != n - 2) 
    			for (int j = 0; j < maxn; j++) {
    				t[j] = res[j];
    			   	res[j] = '0';
    			}
    		}
    		if (p >= strlen(res)) {
    			printf(".");
    			for (int i = 0; i < p - strlen(res); i++)
    				printf("0");
    			printf("%s
    ", res);
    		}
    		else {
    			int i;
    			for (i = 0; i < strlen(res) - p; i++)
    				printf("%c", res[i]);
    			printf(".");
    			printf("%s
    ", res + strlen(res) - p);
    		}
    	}
    	return 0;
    }


  • 相关阅读:
    BIOS详解:什么是BIOS ?BIOS的作用?CMOS及其与BIOS的关系?
    随机数不随机
    解决hexo神烦的DTraceProviderBindings MODULE_NOT_FOUND
    保护模式特权级别DPL,RPL,CPL 之间的联系和区别
    Linux内核 hlist_head/hlist_node结构解析
    x86中的页表结构和页表项格式
    Linux下/proc目录简介
    bdev文件系统
    X86 IO端口和MMIO
    Mac OS Alfred 2 tips
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3215108.html
Copyright © 2011-2022 走看看