| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
1001,Wrong Answer,可是自己输入、输出都是对的啊,到底是那里错了呢?#include <iostream>
#include <sstream>
#include <string>
using namespace std;
struct NumType {
string str;
int power;
}num[6];
template <class T>
inline T fromString (const string & str) {
istringstream is (str);
T v;
is >> v;
return v;
}
void Change (string str,int num[],int *p,int *q) {
int length1 = str.length();
string a[100] = {"0"};
for (int i = 0;i < length1;i++)
a[i] = str[i];
//将小数化为整数
int n=0;
int s=0,r=0;
for (int k = 0;k < length1;k++) {
if (a[k] == ".") {
s = k;
continue;
}
else {
num[n] = fromString <int> (a[k]);
n++;
}
}
*p = n;
*q = n-s;
}
void Reverse (int num[],int n) {
int num1[200] = {0};
for (int i = 0;i < n;i++) {
num1[i] = num[i];
}
for (int j = 0,k = n-1;j < n,k >= 0;j++,k--)
num[k] = num1[j];
}
void Dispose (int num[],int *n) {
int i = *n;
if (num[i-1] == 0)
*n = i-1;
}
int HighPrecisionMultiplication (int Num1[],int *bit1,int *bit2,int *bit) {
int c[200] = {0},i,j,len;
// memset (c,0,sizeof (c));
for(i=0;i<(*bit2);i++)
for(j=0;j<(*bit1);j++) {
c[i+j]=c[i+j]+(*(bit+j))*Num1[i];
}
len = (*bit1) + (*bit2);
for(i=0;i<len;i++)
{
c[i+1]=c[i+1]+c[i]/10;
c[i]=c[i]%10;
*(bit+i) = c[i];
}
if (c[len-1] <= 0) {
*bit1 = (len - 1);
return *bit,*bit1;
}
else {
*bit1 = len;
return *bit,*bit1;
}
}
void output (string str0,int power0) {
string str;
int power;
str = str0,power = power0;
int Num[200] = {0},intbit = 0,floatbit = 0;
//转换函数Change调用,字符串转换为数存放在数组里,相当于转化为一整数
Change (str,Num,&intbit,&floatbit);
//倒置函数reverse函数调用,数组倒置
Reverse (Num,intbit);
//数据处理,把尾部的0处理掉,例如,输入0.4321,经过转化,倒置,处理后变为1234
int Num1[200] = {0};
Dispose (Num,&intbit);
for (int j = 0;j < intbit;j++) {
Num1[j] = Num[j];
}
//相乘
int bit1,bit2;
bit1 = intbit,bit2 = intbit;
//指数的n-1次相乘
for (int i = 1;i < power;i++) {
HighPrecisionMultiplication (Num1,&bit1,&bit2,Num);
for (int j = bit1-1;j >= 0;j--) {
if (Num1[i] == 0) {
Dispose (Num,&bit1);
}
else
break;
}
}
int T = 0;
for (;T < bit1;T++) {
if (Num[T] == 0)
continue;
else
break;
}
if (bit1 < floatbit*power)
bit1 = floatbit*power;
for (int j = bit1-1;j >= 0;j--){
if (Num[bit1-1] != 0) {
cout << Num[j];
if (j == (floatbit*power))
cout << ".";
}
else {
if (j == (floatbit*power)-1)
cout << ".";
cout << Num[j];
}
if (T != 0)
if (j == T)
break;
}
cout << endl;
}
int main () {
for (int i = 0;i < 6;i++) {
cin >> num[i].str >> num[i].power;
}
cout << endl;
string str0;
int power0;
for (int j = 0;j < 6;j++) {
str0 = num[j].str,power0 = num[j].power;
output (str0,power0);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator