在POJ上,测试通过(因为我在CSDN中很多不能通过的,特别声明)
一,首先,说说我的解题思路,就是模仿乘法的运算过程,再来用字符串存结果;(这个不是很难);
二,这个题目对于我来说,难的是没有考虑全面,
a, 第一次使用完变量,前面都要初始化,不然容易出现 rinning error;
b, 在设计算法的时候,对数据没考虑全面,比如,数据前面,和后面为零的无意义;题目要求去掉,我没去掉;
c, 在对数据处理的时候,有可能会影响到后面的算法,要做好事先处理或事后处理;
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <string>
using namespace std;
const int MAX = 500;
char a[MAX];
char b[MAX];
char temp[MAX];
char result[MAX];
char str[8]="98.999";
int n = 10,point;
bool pointEmpty(){
int i;
for(i=0; i<strlen(str); i++)
if(str[i] == '.')
return true;
return false;
}
void init(){
int i,j;
char str2[8] = "0";
memset(a,0,MAX*sizeof(char));
memset(b,0,MAX*sizeof(char));
memset(result,0,MAX*sizeof(char));
memset(temp,0,MAX*sizeof(char));
int len = strlen(str);
for(i=0; str[i] == 48; i++) ;
for(j=0; j<len||i<len; j++){
str[j] = str[i++];
}
if(str[0] == '.'){
strcat(str2, str);
strcpy(str,str2);
}
if(pointEmpty())
for(i=strlen(str)-1; str[i]=='0'; i--)
str[i] = '\0';
for(i=strlen(str)-1,j=0; i>=0; i--){
if(str[i]!='.'){
b[j] = str[i];
a[j++] = str[i];
}else{
point = strlen(str) - i - 1;
}
}
point = point*n;
}
void fun(){
int i,j,h,k,v,z,x,y;
if(n==1) {
strcpy(result, a);
return ;
}
if(n==0){
strcpy(result, "1");
return ;
}
while(--n){
for(i=0; i<strlen(a); i++){
z=0; h=0;
for(j=0; j<strlen(b); j++){
z = (a[i]-48) * (b[j]-48) + z;
v = z%10;
z = z/10;
temp[h++] = v+48;
}
if(z!=0) temp[h++] = z+48;
temp[h] = '\0';
h=0;z=0;
for(k=i; k<j || h<strlen(temp); h++,k++){
if(i==0){
result[k] = temp[h];
}else{
if(result[k] == 0) x=0;
else x = result[k]-48;
if(temp[h] == 0) y=0;
else y = temp[h]-48;
z = x + y + z;
v = z%10;
z = z/10;
result[k] = v+48;
}
}
if(z!=0) result[k++] = z+48;
result[k] = '\0';
}
strcpy(b, result);
}
}
void solve(){
int count,i,j,k;
char ch;
init();
fun();
strcpy(temp, result);
for(i=0,j=0; i<strlen(result); i++){
if(point == i && point!=0){
result[j++] = '.';
}
result[j++] = temp[i];
}
k = strlen(result);
for(i=k-1; i>=k/2; i--){
ch = result[i];
result[i] = result[k-i-1];
result[k-i-1] = ch;
}
for(i=0; result[i] == 48; i++) ;
int len = strlen(result);
for(j=0; j<len||i<len; j++){
result[j] = result[i++];
}
printf("%s\n",result);
}
int main()
{
while(cin>>str>>n){
solve();
}
return 0;
}