emmmm,一些想说最后的话

昨天台风来了,停了一天的电
那个,第十题是吧。。。。最终是做出来了,按照我的思路也是没有问题。。。不过,题目的思路好像跟我不一样,也就是说,我的思路一开始就错了,做了四天的题竟然一开始就是错的。。。虽然说还有5分

我以为是我哪里出错了,去找了找网上的,下面是个例子
1234567890009876543211111111111234567890987654321234567890987654321234567890987656765465456876765476545654

12345678900987687654365543234567987654677558765433234567654567978967564535434568990908977564534435568909009789675
相加
第二个数比第一个数长了几位,这时候不论结果是什么,我认为答案的第一位一定是1
所以我的答案是
12345680135555577664242086445679098765912126656420888888889135869955218856669136881896634329999892445674486335329
可是,别人的答案是
20678954801692280135555577664242086445679098765912126656420888888889135869955218856669136881896634329999892445674486335329
甚至比最长的第二个数长了九位,我已经不知道加法是什么意思了,他到底是怎么加出来的???

我真的做不下去了,最多看看别人的思路。最近博客应该不会更新了,
一是最近应该要把重心放在别人的代码上了
二是是快上学了,两周回家一天没有时间
三是说实话,我还不知道人家竞赛班到底要不要我,一个月前说是可以直接去跟着学习,但怎么说那个老师不是真的管事的,连哪个校区的都不知道。一个月了,我也不敢问是个啥情况,说到底我也是没了好几次机会,他能这样说我已经非常开心了。
四啊,就是我的内部原因了,我不太敢去赌,再怎么说别人竞赛的也比我多学了半年多,我想靠一个暑假赶上是不太可能的。就算我进去了,学的很好还行;如果不好,就必须要为高考着想,退出竞赛班,把编程这个兴趣放在大学,就算这样我的文化课也应该拉下不少
唉,我真的是又懒又笨又怂又恶心
我也不知道到底是谁那么闲得慌把我写日记的博客都看了,正常搜应该是搜不到把?这些算是写给你也是写给我的吧。
最后附上我的代码&别人的

#include <iostream>
#include <cstring>
#include <sstream>
#include <cctype>
using namespace std;
void wtnl(char*,int*,int*);
int main(void){
 char st1[201]={'0'},
 st2[201]={'0'};  //储存最初的字符
int num1[201],num2[201]; //储存除去0的整数
 int len1,len2;
        wtnl(st1,num1,&len1);
        wtnl(st2,num2,&len2); //在这一步全部实现
    int max = len1 >= len2 ? len1 : len2; //大的那个数组的长度
    int min = len1 >= len2 ? len2 : len1; //小的
    num1_f[201],num2_f[201];
    for(int i=len1-1,j=0;i>=0;i--,j++){ //反转输入num1
        num1_f[j]=num1[i];
    }
    for(int i=len2-1,j=0;i>=0;i--,j++){//反转输入num2
        num2_f[j]=num2[i];
    }
int final_num[max];
for(int i=0,e=0;i<max;i++){
        if(i+1<=min){
            int re =num1_f[i]+num2_f[i];
            if((re+e)/10==0) {final_num[i]= re%10+e;e=0;} //如果上一位相加的余一和这一位相加的和不大于10
            else {final_num[i]= (re+e)%10;e=0;e++;} 
            }
        else final_num[i]= len1>len2 ? num1_f[i] : num2_f[i]; //否则最后直接等于长的那个数组
        }
for(int i=max-1;i>=0;i--){
        cout << final_num[i];
    }
}
void wtnl(char* st,int* num,int* len){
 cin >> st; //输入一串字符
 int j=0,len_num=0,len_noNum=0;
 int len_st= strlen(st);
 for(int i=0;i<len_st;){
        if(st[j]!='0') {//如果字符不是0
            while(i<len_st){
            stringstream ss; //转换字符为整数
            ss << st[j]; //把st[j]给ss
            ss >> num[i]; //把ss给num[i]
            j++;i++;len_num++;
            }
        }else{j++;len_noNum++;} //如果是0,只增加j,每有一个0就有一个\0占位置,len_no是为了减去\0占的空间
 }
eal_len; //每个数组的长度
};

真的写了三天,中间出了好多错,调试了好多,还去问百度,还换了好多方法
虽然到最后还是错了

别人的:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main ()
{
    int a[202],b[202],c[202],la,lb,lc,x=0;  //数组a,b代表被加数  c代表和数
    char a1[2000],b1[2000];   //方便输入以及进行倒序用
    gets(a1);    //读取字符
    gets(b1);
    la=strlen(a1);      //字符数组长度
    lb=strlen(b1);
    for(int i=0;i<=la-1;i++)     //进行倒序a
    {
        a[la-i]=a1[i]-'0';  //转换字符为数字
    }
    for (int j=0;j<=lb-1;j++)   //进行倒序b
    {
        b[lb-j]=b1[j]-'0';
    }
    lc=1;
    while(lc<=la||lc<=lb)   //进行加法进位
    {
        c[lc]=a[lc]+b[lc]+x;
        x=c[lc]/10;
        c[lc]%=10;
        lc++;
    }
    c[lc]=x;
    while(c[lc]==0)  //注意最高位为0要舍弃
    {
        lc--;
    }
    for(int k=lc;k>=1;k--)   //注意存放在数组中的数是倒序的
    {
        cout<<c[k];
    }
    return 0;
}

下去慢慢研究去了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值