C_and_CPP 板


LINE

问题是一开始不能输入大值 如100之类的 但是只要先输入小值 像是10(试过只能打到48)之类的 然後印出来 之後要打到1000都OK 输出是输出第N项费氏数列 我有去网上找资料 我的程式做出来的答案是对的 而测试程式码的部分就不修掉了 希望高手们能帮我看看问题是出在哪 以下附上小弟程式码 #include<stdio.h> #include<stdlib.h> #include<string.h> struct big_number{ char data[500]; }; int number,length_I,length_II; char *replace_value,*replace_answer; char answer[500],data[500]; /*data是倒转时的预备字串*/ struct big_number fibonacci[1000]; char* add(struct big_number* value_a,int length_a,struct big_number* value_b,int length_b); char* get_strrev_number(struct big_number value,int length,char* out); void fibonacci_number(int number); void read_in(struct big_number* target,char *value,int length); int get_length(struct big_number data,int length); int main(){ char one[5]={'1'},enter; sprintf(fibonacci[0].data,"%s",one); sprintf(fibonacci[1].data,"%s",one); //fibonacci_number(1000); while(~scanf("%d%c",&number,&enter)){ /*第一次无法打大数字.... 有待解决*/ fibonacci_number(number); printf("fibonacci(%d):%s\n",number,fibonacci[number-1].data); } return 0; } int add(struct big_number value_a,int length_a,struct big_number value_b,int length_b){ memset(answer,0,sizeof(answer)); char *value_I,*value_II; value_I=(char*)malloc(sizeof(value_I)); value_II=(char*)malloc(sizeof(value_II)); /*没开空间给指标的话 无法使用*/ int i,max_length=(length_a>=length_b)?length_a:length_b,count=0; //printf("value_a:%s length_a:%d\nvalue_b:%s length_b:%d\n",value_a.data,length_a,value_b.data,length_b); //printf("max_length:%d\n",max_length); value_I=get_strrev_number(value_a,length_a,value_I); value_II=get_strrev_number(value_b,length_b,value_II); //printf("value_I:%s\nvalue_II:%s\n",value_I,value_II); for(i=0;i<=max_length;++i){ //printf("add max_number:%d\n",max_length); answer[i]+=(answer[i]==0)?48:0; value_I[i]=((value_I[i]==0)?48:value_I[i]); value_II[i]=((value_II[i]==0)?48:value_II[i]); answer[i]+=value_I[i]+value_II[i]-96; //printf("before ADD%s---%d\n",answer,answer[i]); if(answer[i]>=58){ //printf("进位前%c\n",answer[i+1]); answer[i+1]+=(answer[i+1]>48?1:49); answer[i]-=10; //printf("%c进位%c\n",answer[i],answer[i+1]); count++; } //printf("%c",answer[i]); } //printf("\nadd over\n"); free(value_I);free(value_II); for(i=0;answer[i]!='\0';++i){ } /*算answer的长度*/ max_length=i-1; return max_length; /*answer阵列为全域阵列 不用传出*/ } char* get_strrev_number(struct big_number value,int length,char *out){ /*将倒转值输出*/ memset(data,0,sizeof(data)); int i,number=length; //printf("in function get_strrev_number:\nlength:%d value:",length); for(i=0;i<=length+1;++i){ /*\0也要传过来啊 所以到length+1*/ data[i]=value.data[number]; //printf("%c",value.data[number]); number--; } //printf("\n"); /*for(i=0;i<=length/2;i++){ if(data[i]>=48&&data[i]<=57){ data[i]=data[number]; number--; } }*/ //printf("function finish:%s\n",data); sprintf(out,data); //printf("function out:%s\n",out); //printf("-----get_strrev_number over------\n"); return out; } int get_length(struct big_number data,int length){ int i; //printf("in get_length:%s\n",data.data); for(i=0;i<=999;++i){ if(data.data[i]<=47||data.data[i]>=58){ break; } } length=i-1; //printf("length:%d\n------get_length over-------\n",length); return length; } void fibonacci_number(int number){ //printf("now number:%d in[%d]\n",number,number-1); if(fibonacci[number-1].data[0]!=0||number==1||number==2){ //printf("check:fibonacci[%d]:%s ",number-1,fibonacci[number-1].data); //printf("stop:%d\n",stop); //printf("out_data:%s\n",fibonacci[number-1].data); //printf("_____________________\n"); return ; } else{ int length_replace; if(fibonacci[number-2].data[0]==0||fibonacci[number-1].data[0]==0){ //printf("RE number=%d=>%d find %d %d\n",number,number-1,number-2,number-3); fibonacci_number(number-2); //printf("1.number:%d fuction(%d)fibonacci[%d]:%s\n", number,number-2,number-3,fibonacci[number-3].data); fibonacci_number(number-1); //printf("2.number:%dfuction(%d)fibonacci[%d]:%s\n", number,number-1,number-2,fibonacci[number-2].data); } //printf("ADD %d=[%d]%s [%d]%s\n", number,number-2,fibonacci[number-2].data,number-3, fibonacci[number-3].data); length_I=get_length(fibonacci[number-2],length_I); length_II=get_length(fibonacci[number-3],length_II); length_replace=add(fibonacci[number-3],length_II ,fibonacci[number-2],length_I); read_in(&fibonacci[number-1],answer,length_replace); //printf("length_replace:%d\n",length_replace); //printf("----------------else over------------\n"); } } void read_in(struct big_number* target,char *value,int length){ /*target要传记忆体位置*/ /*在这里把倒过来的answer转回来*/ int i,j=0; //printf("doing\n"); for(i=length;i>=0;--i){ target->data[j]=value[i]; //printf("%c",value[i]); j++; } //printf("\ntarget\n"); for(i=0;i<length+1;++i){ //printf("%c",target->data[i]); } //printf("\n"); } --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.143.154.146
1F:→ dendrobium:请使用有意义的标题! 10/18 13:47
※ 编辑: seedpk5079 来自: 220.143.154.146 (10/18 13:53)
2F:→ seedpk5079:抱歉 刚刚漏打标题... 以为只要按T修改就好了QQ 10/18 13:54
※ 编辑: seedpk5079 来自: 220.143.154.146 (10/18 13:58)







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP