日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法练习——ACM_1001_Exponentiation

發布時間:2025/6/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法练习——ACM_1001_Exponentiation 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

求高精度冪
Time Limit: 500MS ?? ? ??? ?Memory Limit: 10000K
Total Submissions: 126980 ?? ? ??? ?Accepted: 30980

Description
對數值很大、精度很高的數進行高精度計算是一類十分常見的問題。比如,對國債進行計算就是屬于這類問題。

現在要你解決的問題是:對一個實數R( 0.0 < R < 99.999 ),要求寫程序精確計算 R 的 n 次方(Rn),其中n 是整數并且 0 < n <= 25。

Input
T輸入包括多組 R 和 n。 R 的值占第 1 到第 6 列,n 的值占第 8 和第 9 列。

Output
對于每組輸入,要求輸出一行,該行包含精確的 R 的 n 次方。輸出需要去掉前導的 0 后不要的 0 。如果輸出是整數,不要輸出小數點。
?
解決思路

? 這是一道高精度的題,主要是處理前導0和末尾0的時候有點麻煩。例如100.00可能會處理成1。

/** 求高精度冪 Time Limit: 500MS Memory Limit: 10000K Total Submissions: 126980 Accepted: 30980Description 對數值很大、精度很高的數進行高精度計算是一類十分常見的問題。比如,對國債進行計算就是屬于這類問題。現在要你解決的問題是:對一個實數R( 0.0 < R < 99.999 ),要求寫程序精確計算 R 的 n 次方(Rn),其中n 是整數并且 0 < n <= 25。Input T輸入包括多組 R 和 n。 R 的值占第 1 到第 6 列,n 的值占第 8 和第 9 列。Output 對于每組輸入,要求輸出一行,該行包含精確的 R 的 n 次方。輸出需要去掉前導的 0 后不要的 0 。如果輸出是整數,不要輸出小數點。解決思路這是一道高精度的題,主要是處理前導0和末尾0的時候有點麻煩。例如100.00可能會處理成1。程序使用:http://my.oschina.net/leopardsaga/blog/123495?fromerr=atjgdwtv */ #include "stdafx.h" #include<stdio.h> #include<math.h> #include<string>int len_r; int* pow_s(int x,int n,int len);int main(){char num_c[6];int N;while(scanf("%s %d", num_c, &N) != EOF){int position=0, i=0, num=0, j=0,len=0;for (i=0; i<strlen(num_c); i++) {if (num_c[i] == '.'){position = (strlen(num_c) - 1 - i) * N; // calculate decimal point position after R^n}else{ num = num*10 + num_c[i] - 48; // transfer float to integerif(num*10/1){len++;}} }int* result = pow_s(num,N,len);if(len_r < position){printf("."); // print decimal pointfor (i=0; i<position-len_r; i++){printf("0"); // print zero between decimal point and decimal}//while (product[j] == 0) // trim trailing zeros{// j++;//}for (i=len_r-1; i>=j; i--){printf("%d", result[i]);}} else {while (result[j]==0 && j<position){ // trim trailing zerosj++;}for (i=len_r-1; i>=j; i--){if (i+1 == position){ // cause index in C language starts from 0 printf(".");}printf("%d", result[i]);}}free(result);} free(num_c);return 0; }int* pow_s(int a,int n,int len){int i,j,carry=0;int* result = (int*)malloc(sizeof(int)*(len)*n);result[0] = 1;len_r = 1;for (j = 0; j < n; j++){for (i = 0; i < len_r; i++){int temp = result[i]*a + carry;result[i] = temp % 10;carry = temp / 10; }while (carry){result[i++] = carry % 10;carry /= 10;}len_r = i;} return result; }

?程序使用:http://my.oschina.net/leopardsaga/blog/123495?fromerr=atjgdwtv

轉載于:https://www.cnblogs.com/zhuqingqin/p/5396650.html

總結

以上是生活随笔為你收集整理的算法练习——ACM_1001_Exponentiation的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。