
POJ 1001 wrong answer ,我试了下题目上面给的例子,答案全部一样,可是提交时总是Wrong answer ,高手帮忙
#include<stdio.h>#include<stdlib.h>#defineMAX125#defineBASE6intmain(void){unsignedcha...
#include <stdio.h>
#include <stdlib.h>
#define MAX 125
#define BASE 6
int main(void) {
unsigned char input[BASE];
unsigned int dim, changed[BASE - 1] = { 0 }, y, temp[MAX] = { 0 }, result[MAX] =
{ 0 };
int dec, m, out, ispure, back, i, j, k, t, s, z;
memset(input, 0, sizeof(input));
while (scanf("%s%d", input, &dim) == 2) {
memset(changed, 0, sizeof(changed));
memset(temp, 0, sizeof(temp));
memset(result, 0, sizeof(result));
m = 0;
back = 0;
j = 0;
k = 1;
s = 0;
if (input[0] == '0')
ispure = 1;
else
ispure = 0;
for (i = 0; i < BASE; i++) {
if (input[BASE - 1 - i] == '.') {
dec = BASE - i - 1;
continue;
}
changed[j++] = input[BASE - i - 1] - '0';
if (!(s += changed[i]))
back = i + 1;
}
memcpy(temp, changed, sizeof(changed));
for (z = 0; z < dim - 1; z++) {
for (i = 0; i < MAX; i++)
for (j = 0; j < BASE - 1; j++) {
result[i + j] += temp[i] * changed[j];
}
for (i = 0; i < MAX; i++) {
result[i + 1] += result[i] / 10;
result[i] = result[i] % 10;
}
memset(temp, 0, sizeof(temp));
memcpy(temp, result, sizeof(result));
memset(result, 0, sizeof(result));
}
t = MAX + 1 - dim * (BASE - 1 - dec);
if (back)
out = dim * back;
else
out = 0;
if (ispure == 0) {
for (i = MAX - 1; i >= out; i--) {
if (temp[i] == 0 && m == 0) {
k++;
continue;
} else {
m = 1;
if (t == (k++))
printf(".");
printf("%d", temp[i]);
}
}
} else {
y = (BASE - dec - 1) * dim;
printf(".");
for (i = y - 1; i >= out; i--) {
printf("%d", temp[i]);
}
}
printf("\n");
}
return 0;
}
我的编译器是LINUX GCC 4.4.4版本的,在线等,高手指点下了,这个东西写了一天了 展开
#include <stdlib.h>
#define MAX 125
#define BASE 6
int main(void) {
unsigned char input[BASE];
unsigned int dim, changed[BASE - 1] = { 0 }, y, temp[MAX] = { 0 }, result[MAX] =
{ 0 };
int dec, m, out, ispure, back, i, j, k, t, s, z;
memset(input, 0, sizeof(input));
while (scanf("%s%d", input, &dim) == 2) {
memset(changed, 0, sizeof(changed));
memset(temp, 0, sizeof(temp));
memset(result, 0, sizeof(result));
m = 0;
back = 0;
j = 0;
k = 1;
s = 0;
if (input[0] == '0')
ispure = 1;
else
ispure = 0;
for (i = 0; i < BASE; i++) {
if (input[BASE - 1 - i] == '.') {
dec = BASE - i - 1;
continue;
}
changed[j++] = input[BASE - i - 1] - '0';
if (!(s += changed[i]))
back = i + 1;
}
memcpy(temp, changed, sizeof(changed));
for (z = 0; z < dim - 1; z++) {
for (i = 0; i < MAX; i++)
for (j = 0; j < BASE - 1; j++) {
result[i + j] += temp[i] * changed[j];
}
for (i = 0; i < MAX; i++) {
result[i + 1] += result[i] / 10;
result[i] = result[i] % 10;
}
memset(temp, 0, sizeof(temp));
memcpy(temp, result, sizeof(result));
memset(result, 0, sizeof(result));
}
t = MAX + 1 - dim * (BASE - 1 - dec);
if (back)
out = dim * back;
else
out = 0;
if (ispure == 0) {
for (i = MAX - 1; i >= out; i--) {
if (temp[i] == 0 && m == 0) {
k++;
continue;
} else {
m = 1;
if (t == (k++))
printf(".");
printf("%d", temp[i]);
}
}
} else {
y = (BASE - dec - 1) * dim;
printf(".");
for (i = y - 1; i >= out; i--) {
printf("%d", temp[i]);
}
}
printf("\n");
}
return 0;
}
我的编译器是LINUX GCC 4.4.4版本的,在线等,高手指点下了,这个东西写了一天了 展开
展开全部
先把你的程序的目的描述清楚方便大家给你看,要不你就好好做注释。
展开全部
这是我的。。你去对拍下数据吧
。。多试试不同数组。。多看看DIS那里。。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int sum[1500];
int a[1500],b[1500];
void mul()
{
int len,i,j;
len=a[0]+b[0];
for(i=1;i<=a[0];i++)
for(j=1;j<=b[0];j++)
sum[i+j-1]+=a[i]*b[j];
for(i=1;i<=len;i++)
if(sum[i]>9)
{
sum[i+1]+=sum[i]/10;
sum[i]%=10;
}
while(len>1&&sum[len]==0)
len--;
sum[0]=len;
for(i=0;i<1500;i++) a[i]=sum[i];
}
int main()
{
int T;
int i,j,n,Count,flag;//Count记录小数点后 有几位数
char s[30];
while(scanf(" %s%d",s,&n)!=EOF)
{
for(i=0,flag=0;s[i];i++) if(s[i]=='.')flag=1;//有小数点
if(flag)
{
for(i--;i>=0;i--)
if(s[i]=='0') s[i]=0;
else break;
}
for(i=0,j=0,Count=0;s[i];i++,Count++)//改造S,去除小数点
{
if(s[i]!='.') s[j++]=s[i];
else Count=0;
}
Count--;
s[j]=0;
Count*=n;
//printf("%d\n",Count);
a[0]=strlen(s);
for(i=1;i<=a[0];i++) a[i]=s[a[0]-i]-'0';
//for(i=a[0];i>0;i--) printf("%d",a[i]);printf("\n");
for(j=1;j<n;j++)
{
memset(sum,0,sizeof(sum));
b[0]=strlen(s);
for(i=1;i<=b[0];i++) b[i]=s[b[0]-i]-'0';
mul();
}
if(a[0]>Count)
{
for(i=a[0];i>0;i--)
{
if(a[0]-Count==(a[0]-i)) printf(".");
printf("%d",a[i]);
}
}
else
{
printf(".");
for(i=0;i<Count-a[0];i++) printf("0");
for(i=a[0];i>0;i--) printf("%d",a[i]);
}
printf("\n");
}
return 0;
}
。。多试试不同数组。。多看看DIS那里。。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int sum[1500];
int a[1500],b[1500];
void mul()
{
int len,i,j;
len=a[0]+b[0];
for(i=1;i<=a[0];i++)
for(j=1;j<=b[0];j++)
sum[i+j-1]+=a[i]*b[j];
for(i=1;i<=len;i++)
if(sum[i]>9)
{
sum[i+1]+=sum[i]/10;
sum[i]%=10;
}
while(len>1&&sum[len]==0)
len--;
sum[0]=len;
for(i=0;i<1500;i++) a[i]=sum[i];
}
int main()
{
int T;
int i,j,n,Count,flag;//Count记录小数点后 有几位数
char s[30];
while(scanf(" %s%d",s,&n)!=EOF)
{
for(i=0,flag=0;s[i];i++) if(s[i]=='.')flag=1;//有小数点
if(flag)
{
for(i--;i>=0;i--)
if(s[i]=='0') s[i]=0;
else break;
}
for(i=0,j=0,Count=0;s[i];i++,Count++)//改造S,去除小数点
{
if(s[i]!='.') s[j++]=s[i];
else Count=0;
}
Count--;
s[j]=0;
Count*=n;
//printf("%d\n",Count);
a[0]=strlen(s);
for(i=1;i<=a[0];i++) a[i]=s[a[0]-i]-'0';
//for(i=a[0];i>0;i--) printf("%d",a[i]);printf("\n");
for(j=1;j<n;j++)
{
memset(sum,0,sizeof(sum));
b[0]=strlen(s);
for(i=1;i<=b[0];i++) b[i]=s[b[0]-i]-'0';
mul();
}
if(a[0]>Count)
{
for(i=a[0];i>0;i--)
{
if(a[0]-Count==(a[0]-i)) printf(".");
printf("%d",a[i]);
}
}
else
{
printf(".");
for(i=0;i<Count-a[0];i++) printf("0");
for(i=a[0];i>0;i--) printf("%d",a[i]);
}
printf("\n");
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询