| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1272 人关注过本帖
标题:求任意两个正数之和的程序中的问题
只看楼主 加入收藏
sainimu78
Rank: 2
等 级:论坛游民
帖 子:57
专家分:26
注 册:2010-1-27
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:7 
求任意两个正数之和的程序中的问题
int ctoi(char c)    /*字符转整型的自定义函数*/
{
int d;
if(c==48)
  d=0;
  else if(c==49)
    d=1;
    else if(c==50)
      d=2;
      else if(c==51)
        d=3;
        else if(c==52)
          d=4;
          else if(c==53)
            d=5;
            else if(c==54)
              d=6;
              else if(c==55)
                d=7;
                else if(c==56)
                  d=8;
                  else if(c==57)
                    d=9;
return d;
}


main()
{
static int i,j,k,a=1,z[1000];
static char x[1000],y[1000];
printf("please input 567 <CR> 99445 to test");
/*输入567回车99445来测试 这两数的和为100012*/
scanf("%s%s",x,y);
for(i=0;i<=1000;i++)
  {
  if(x[i]=='\0')
    {
    for(j=0;j<=1000;j++)
      {
      if(y[j]=='\0')
        {
        break;
        }
      }
    break;
    }
  }

for(k=0;k<=1000;k++)
z[k]=0;
i=i-1;
j=j-1;/*找到输入的两个数的最后一位*/

for(k=0;a;k=k+1,i--,j--)
  {
  if(i<=-1)
    x[i]=0;
  if(j<=-1)
    y[j]=0;/*问题在这块↓ 为什么除了x[2]的值是对的 其它都不对 而y[j]都是对的?*/
  z[k]=z[k]+(ctoi(x[i])+ctoi(y[j]));
  printf("x[%d]=%d ,y[%d]=%d\n",i,ctoi(x[i]),j,ctoi(y[j]));
  if(z[k]>=10) /*如何改能让x[1]=6,x[0]=5 ?~*/
    {
    z[k]=z[k]-10;
    z[k+1]=1;
    }

  if(i<=0&&j<=0)
    break;
  }

for(k=0;k<=1000;k++)
  {
  if(z[k]=='\0'&&z[k]!=48)
    {
    k=k-1; /*找 和 的最后一位*/
    break;
    }
  }

/*for(k;k>0;k--)
  printf("%d",z[k]);*/


getch();
}
                                                                           


 /*该程序是算任意两正数之和*/

[ 本帖最后由 sainimu78 于 2010-2-11 17:41 编辑 ]
搜索更多相关主题的帖子: 正数 之和 
2010-02-11 15:41
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:5 
程序代码:
scanf("%s%s",x,y);
for(i=0;i<1000;i++)//这也不对,但不重要
  {
  if(x[i]=='\0')
    {
    for(j=0;j<1000;j++)//这也不对,但不重要

      {
      if(y[j]=='\0')
        {
        break;
        }
      }
    break;
    }
  }

for(k=0;k<1000;k++)//这是最关键的地方
z[k]=0;
i=i-1;
j=j-1;/*找到输入的两个数的最后一位*/


[ 本帖最后由 heartnheart 于 2010-2-11 21:05 编辑 ]
2010-02-11 21:03
sainimu78
Rank: 2
等 级:论坛游民
帖 子:57
专家分:26
注 册:2010-1-27
收藏
得分:0 
先感谢你回帖啊..

那要我怎么修改呢

你说的最关键的地方 那句 我是想把z[1000]里的每一个都赋值0
 
2010-02-11 21:18
wxx121wxx
Rank: 1
来 自:甘肃
等 级:新手上路
帖 子:5
专家分:5
注 册:2009-7-7
收藏
得分:5 
回复 楼主 sainimu78
其实这个问题不用这么麻烦,没必要搞这么复杂。
首先,数字转换只用将每个字符的数值减48即可,其次,直接将两个数组的对应元素相加,然后进位就可以了,我写的程序如下:
程序代码:
#include<stdio.h>
#include<string.h>
main()
{
      int l1,l2,l,i,m,n=0;
      char a[10000],b[10000];
      int x[10000],y[10000],r[10000];
      memset(x,0,sizeof(x));                    //以下三句将所有x、y、r中元素赋0
      memset(y,0,sizeof(y));
      memset(r,0,sizeof(r));
      scanf("%s",a);
      scanf("%s",b);
      l1=strlen(a);                            //求a的长度
      l2=strlen(b);
      if(l1>=l2)l=l1;
      else l=l2;
      for(i=0;i<l1;i++)x[i]=a[l1-i-1]-48;       //将a转换为数字,同时翻转一次
      for(i=0;i<l2;i++)y[i]=b[l2-i-1]-48;
      for(i=0;i<l;i++)r[i]=x[i]+y[i];
      for(i=0;i<l;i++)                          //将结果进位
      {
                         m=(n+r[i])%10;
                         n=(n+r[i]-m)/10;
                         r[i]=m;
      }
      if(n!=0)printf("%d",n);                   //看最高位是否需进位
      for(i=l-1;i>=0;i--)printf("%d",r[i]);     //输出结果
      getchar();
      getchar();
}
有什么问题可再来问我
2010-02-12 23:22
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:0 
我给你改好了啊,你循环时数组越界了啊…在我的机器上这样就可以正常运行了
2010-02-13 07:40
sainimu78
Rank: 2
等 级:论坛游民
帖 子:57
专家分:26
注 册:2010-1-27
收藏
得分:0 
回复 4楼 wxx121wxx
辛苦你啦 谢谢你给的算法啊

我现在还是想知道 我那个到底怎么回事
2010-02-13 10:50
sainimu78
Rank: 2
等 级:论坛游民
帖 子:57
专家分:26
注 册:2010-1-27
收藏
得分:0 
回复 5楼 heartnheart
我又犯低级错误啦

哦没看清楚你改好的  .  
现在按你的意思改好了
不过不行呢. 输出结果不对
2010-02-13 10:52
sainimu78
Rank: 2
等 级:论坛游民
帖 子:57
专家分:26
注 册:2010-1-27
收藏
得分:0 
原来就是概念性错误啊.
我还以为 数组下标小于0没关系呢...

现在问题解决了哦  谢谢你们
2010-02-13 13:01
快速回复:求任意两个正数之和的程序中的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049198 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved