java北大oj1001_这个——北大 ACM POJ 1001 Exponentiation C/C++
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
帮忙看下
1、在自己电脑上测试没有问题,oj显示答案错误。提交的语言是c++。
2、这个代码哪里不符合C99标准,为什么不能使用C提交。
--------------------------------------------------------------------------------------------------------
#include
#include
#include
typedef struct inputNum input_Num;
typedef struct answer ans;
struct inputNum{
int a;
int x;
int n;
};
struct answer{ //计算的结果保存的地方,a为保存结果的数组,例如输入9512 -2 12 ,计算时会计算9512^12,[10^(-2)]^12
//假如结果为123456789 *[10^(-6)] 保存时就是 a=[6789][2345][1][0][0]……,len=3,x=-6
//
int *a;
int len;
int maxSize;
int x;
};
int initAnswer(struct answer &an){//初始化结构体
an.maxSize=250;
an.len=1;
an.x=0;
an.a=(int *)malloc(an.maxSize*sizeof(int));
an.a[0]=1;
for(int i=1;i
an.a[i]=0;
return 0;
}
int clearAnswer(struct answer &an){//清除结构体中的数据
an.maxSize=250;
an.len=1;
an.x=0;
an.a[0]=1;
for(int i=1;i
an.a[i]=0;
return 0;
}
int calculate(struct inputNum in,struct answer &an){ //输入为9512 -2 12,输出为answer结构体,
an.x=in.x*in.n;//计算[10^(-2)]^12,结果为10^(-24)
for(int i=0;i
if(an.len==an.maxSize-1){//如果answer结构中a的空间不足就分配空间
an.maxSize+=10;//
an.a=(int *)realloc(an.a,an.maxSize*sizeof(int));//
}//
for(int j=0;j
an.a[j]=(in.a)*(an.a[j]);//第一轮a=[1][0][0][0][0]……,第二轮a=[9512][0][0][0][0]……
if(j!=0){//第三轮a=[8144][9047][0][0][0]……
an.a[j]+=(an.a[j-1]/10000); //直至计算完毕
an.a[j-1]=(an.a[j-1]%10000);
}
}
if(an.a[an.len-1]>=10000){//控制进位
int j=an.len++;
an.a[j]+=(an.a[j-1]/10000);
an.a[j-1]=(an.a[j-1]%10000);
if(an.a[an.len-1]>=10000){
int j=an.len++;
an.a[j]+=(an.a[j-1]/10000);
an.a[j-1]=(an.a[j-1]%10000);}
}
}
return 0;
}
int printAnswer(struct answer an){//输出结果
if(an.x>=0){//如果x大于零说明结果中没有小数,直接输出
printf("%d",an.a[an.len-1]);
int jj=an.len-2;
for(jj=an.len-2;jj>=0;jj--){
printf("%04d",an.a[jj]);
}
for(;an.x>0;an.x--)//计算x中存的数字,在结果后面添加对应数量的0
printf("0");
return 0;
}//如果x小于零,则说明有小数
int s,p;//s 1-len p 1-4//s、p保存小数点的位置,a=[8144][9047][0][0][0]……结果为90.478144
//则s=1,p=2;
s=(-an.x)/4;
p=(-an.x)%4;
int headL;//计算最高位的位数,9047就是4
if(an.a[an.len-1]/1000!=0)headL=4;
else if(an.a[an.len-1]/100!=0)headL=3;
else if(an.a[an.len-1]/10!=0)headL=2;
else headL=1;
int newX=(headL+(an.len-1)*4+an.x);//计算a中保存的数据总长度,加上上面计算的10^(-24)中的-24,确定小数点的位置
if(newX>0){//newX大于零表示是1.2343等大于1的数,不需要填充0,小于0则是类似于0.123 0.00012等需要填充0
int a,b,c,d;
a=an.a[s]/1000;
b=(an.a[s]%1000)/100;
c=(an.a[s]/10)%10;
d=an.a[s]%10;
if(s==an.len-1){//如果小数点在最高位中,输出最高位,然后输出所有的数据。
switch(p){
case 0 : {printf("%d",an.a[an.len-1]);
if(s!=0)printf(".");
break;}
case 1 : {printf("%d.%d",an.a[an.len-1]/10,d);
break;}
case 2 : {printf("%d.%d%d",an.a[an.len-1]/100,c,d);
break;}
case 3 : {printf("%d.%d%d%d",a,b,c,d);
break;}
default:break;
}
int j=an.len-2;;
for(j=an.len-2;j>=0;j--)printf("%04d",an.a[j]);
}else{
int j=an.len-2;
printf("%d",an.a[an.len-1]);
for(j=an.len-2;j>s;j--)printf("%04d",an.a[j]);
if(j==s){
switch(p){
case 0 : {printf("%04d",an.a[s]);
if(s!=0)printf(".");
break;}
case 1 : {printf("d%d%d.%d",a,b,c,d);
break;}
case 2 : {printf("%d%d.%d%d",a,b,c,d);
break;}
case 3 : {printf("%d.%d%d%d",a,b,c,d);
break;}
default:break;
}
}
for(j=s-1;j>=0;j--)printf("%04d",an.a[j]);
}}else{
//这里的就是类似于0.0012的数
printf("."); //输出 .
for(;newX<0;newX++) //输出 00
printf("0");
printf("%d",an.a[an.len-1]);
for(int j=an.len-2;j>=0;j--){ //输出12
printf("%04d",an.a[j]);
}
}
return 0;
}
int main(){
double R;//R和n对应输入的底数和幂
int n;
input_Num in; //存放输入数据的结构体
ans an;//存放计算结果的结构体
initAnswer(an);//初始化结构体
while(scanf("%lf%d",&R,&n)!=EOF){//输入例如为95.120 12
if(R>=10){ //转化为 95120 -3 12 并存入InputNumber结构体
in.a=(int)(R*1000);//
in.x=-3;//
in.n=n;}
else{
in.a=(int)(R*10000);
in.x=-4;
in.n=n;
}
if(in.a%10000==0){in.a=in.a/10000;in.x+=4;} //转化为9512 -2 12 并修改结构体数据
else if(in.a%1000==0){in.a=in.a/1000;in.x+=3;}
else if(in.a%100==0){in.a=in.a/100;in.x+=2;}
else if(in.a%10==0){in.a=in.a/10;in.x+=1;}
calculate(in,an);//计算,下转到计算函数calculate内部
printAnswer(an);
printf("\n");
clearAnswer(an);
}
return 0;
}
java北大oj1001_这个——北大 ACM POJ 1001 Exponentiation C/C++相关推荐
- POJ 1001 Exponentiation C++解题报告 JAVA解题报告
求高精度幂 Time Limit: 500MS Memory Limit: 10000K Total Submissions: 126980 Accepted: 30980 Descripti ...
- POJ 1001 Exponentiation (记第一道Java水过的题)
妹的!java些高精度相当与玩cs开外挂!电脑装上java很久了,一直只会写写a + b 玩,今天心血来潮找个高精度来玩玩.^ ^ import java.io.*; import java.util ...
- poj 1001 Exponentiation(java)
点击打开链接 Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 178771 Accepted: ...
- POJ 1001 Exponentiation
最裸的高精度幂,记录一下Java里面高精度类的用法而已 1 import java.io.*; 2 import java.util.Scanner; 3 import java.math.*; 4 ...
- POJ 1001 Exponentiation
题意:求c的n次幂--要求保留所有小数-- 解法:一开始只知道有BigInteger--java大数+模拟.第一次写java大数--各种报错各种exception--ORZ 没有前导0和小数后面的补位 ...
- ACM POJ 题目分类(完整整理版本)
DP: 1011 NTA 简单题 1013 Great Equipment 简单题 1024 Calendar Game 简单题 ...
- acm java输入输出_在竞赛ACM Java处理输入输出
一.Java之ACM注意点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个" ",程序可能会输出错误,所以在我看来 ...
- 北大计算机在本部吗,北大本部和北大医学部都属于北京大学,那么两者有什么区别?...
网友一: 北大和北大医学部区别在校区不同,招生代码不同(医学部收分略低):而两者毕业证学位证书均为"北京大学",没有区别.对于对医学感兴趣的同学选择北大医学部是明智之举.而作为北大 ...
- 考研计算机选择北大还是上交,北大计算机技术考研经验分享
北大计算机技术考研 北大计算机技术考研经验分享 本人顺利通过北大计算机技术考研,我看到有很多同学处于迷茫阶段,于是我总结本人在今年北大计算机技术考研备考过程中个人的一些心得体会,希望对后来者有所帮助. ...
最新文章
- 条件变量 pthread_cond_wait
- TableView的重要性
- python多进程优化_『Python』多进程处理
- python实战,教你用微信每天给女朋友说晚安
- HEXA机器人荣获CES Asia2018 创新奖
- kingcms的标签
- yii学习笔记(6),数据库操作(增删改)
- el表达式里面fn的用法
- 谷歌翻译接口_QTranslate:电脑全局翻译神器
- 万能解压器安卓版_全能压缩软件下载
- centos老是自动更换ip地址解决方案
- python使用requests库爬取淘宝评论
- DELL R730xd 安装PCIE SSD 后风扇转速增高的解决方案
- 怀揣梦想,我依靠自己,往后余生越来越精彩
- 简单力场护盾效果ASE实现笔记
- 【UER #7】套路
- cboard企业版源码_CBoard自助BI数据分析产品 v0.4.2
- MVC发布出现:未能将文件bin\xxx.xml 复制到 obj\Release\PackageTmp\bin\xxx.xml,未能找到文件
- R048---UiPath中四种筛选数据的方法
- 计算机管理记事本,电脑记事本软件
热门文章
- TOMCAT 连接池数据库密码加密方法
- 报错,can‘t found the source action, can‘t run the graph[fatal.flow]
- npm run build失败
- 【codevs3044】矩形面积求并【POJ1151】Atlantis,第一次的扫描线
- 三种背包问题的例题(各一道)
- 粤嵌gec6818项目设计_西安市幸福林带景观及亮化设计国际竞赛终期评审会顺利举行...
- linux配置iscsi无账号密码,linux配置ISCSI服务器的方法
- 用Java通讯录字母排序,按所有Catorgories显示联系人数据库标记,然后按字母顺序排序| PHP SQL...
- sublime 如何使用less_Sublime Text3 使用教程
- 【英语学习】【Daily English】U03 Leisure Time L01 Did you have a nice weekend?