11.23总结

本文记录了一名编程新手在一天中密集学习的经历,涉及字符串函数strlwr和strcmp的深入理解,以及复杂二维数组在回文时间查找中的应用。作者还分享了大数乘法的技巧,尤其是处理大数加减法的转换。通过解决实际问题,作者认识到自己在二维数组和C语言基础方面的不足,并决心加强训练。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天除了上数学课和心里考试全部坐在电脑前刷题

启航oj 4,

菜鸟杯 oj3,

因为我是一个入门比较晚的菜鸟所以我唯一能做的就是挤出所有的时间全部用来补别人已经明白的东西。

今天主要的收获就是 字符串三个函数的应用 字符与二维数组的混合运用;大数的乘法;

1.熟悉了函数strlwr的作用是将字符串中的大写字母转  化为小写字母。

2.熟悉了函数strcmp的作用是将a字符串与b字符串中的每一个字符根据ASCII码值的大小进行比较如果1中的字符串与2中的字符串相同则strcmp函数的值为0,如果字符串1大于字符串2,则函数值返回为一个正整数,反之则返回一个负整数。  

上面两个都从我的角度两说比较简单能懂的知识点

下面这个例题我做到吐血debug都debug哭了从早上10.做到下午一点我确实很菜

#include<stdio.h>
#define N 100
int main()
{   int Q,W;
    int i;
    int A,B,C,D,E,F;
    char Z[N]={0};
    int a[20][2]={{00,00},{01,10},{02,20},{03,30},{04,40},{05,50},{10,01},{11,11},{12,21},{13,31},{14,41},{15,51},{20,02},{21,12},{22,22},{23,32},{00,00}};//列举出所有的回文时间
    gets(Z);
    A=(Z[0]-'0')*10;
    B=Z[1]-'0';
    C=(Z[3]-'0')*10;
    D=Z[4]-'0';
    E=A+B;//小时的十进制数
    F=C+D;//分钟的十进制数
    for(i=0;i<17;i++)
    {
        if((E==a[i][0])&&(F<a[i][1]))//判断小时与分钟与回文时间之间的关系 再去选择输出是输出哪一                                                      个回文时间
        {
            Q=a[i][0];
            W=a[i][1];
            break;
        }
        else if(E==a[i][0]&&(F>=a[i][1]))
        {
            Q=a[i+1][0];
            W=a[i+1][1];
            break;
        }
        else if(E<a[i][0])
        {
            Q=a[i][0];
            W=a[i][1];
            break;
        }
    }
        printf("%02d:%02d",Q,W);
        return 0;
}

//之所以会做这么久是因为我的二维数组确实很薄弱我需要在这方面多加练习,而且我的C语言知识体系几乎全部来自于自学因为我们班比较特殊是预科和职高的混合班老师上课直接飞一般的快所以有一些比较细的东西我还没有充分的了解到。

大数的乘法(我觉得还好因为之前做过大数的加法唯一变了的地方就是下方标记的算法关键,就是把乘法变成加法)特别要注意前导当下标=len-1的数组可能存在等于0和不等于0的情况要分情况讨论我在这里错了四次提交 要是等于0要直接去掉。

#include<stdio.h>
#include<string.h>
#define N 100
int main()
{
    int i=0,j=0,l=0;
    int A[N],B[N],C[N+N]={0},len,len1,len2;
    char a[N],b[N];
    gets(a);
    gets(b);
   len1=strlen(a);
   len2=strlen(b);
   for(i=len1-1;i>=0;i--)
   {
       A[j]=a[i]-'0';//反转字符串a中的数字
       j++;
   }
   for(i=len2-1;i>=0;i--)
   {
       B[l]=b[i]-'0';//反转字符串b中的数字
       l++;
   }
   len=len1+len2;//两个数组相乘的长度等于两个数组的长度分别相加
   for(i=0;i<len1;i++)//整个算法的关键
   {
       for(j=0;j<len2;j++)
       {
           C[i+j]=C[i+j]+A[i]*B[j];//每个位数上所含有的数,先不进位;
       }
   }                 //整个算法的关键
   for(i=0;i<len;i++)
   {
       if(C[i]>=10)
       {
           C[i+1]=C[i+1]+C[i]/10;
           C[i]=C[i]%10;
       }
   }
    //此时i=len-1;
    while(C[i]==0) i--;//判断最后一位是不是为0如果是0的话就去掉,如果不是0的话就进行输出
    while(i>=0)
    {
        printf("%d",C[i]);
        i--;
    }
    return 0;
}
虽然我很菜,

但是我不想输。

加油!


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值