11月5日学习总环

实在非常不理解,明明感觉已经理解栈的操作原理,对他的库函数的操作也是比较熟练了,可做关于栈的题目总是会出很多问题,甚至关于他的经典例题括号匹配也是居然都做不出来了,这是我应该深刻反思的地方,到底是学习方法出了问题,还是对于栈得理解有误区?,更多的我觉得我目前做的应该是花费更多的时间去研究编程,锻炼我的编程思维,找到更多解决问题的技巧。今天测试表现得太差了,等我什么时候研究透彻那几道题之后再讲解,今天也不废话了给大家来解决一道比较简单的题目吧:

问题 U: I still love you very much!

描述

等一个喜欢的人,需要多久?

有佛祖弟子阿难,曾愿化身石桥,
受五百年风吹,五百年日晒,五百年雨打,
但求一少女从桥上经过。

忘一个喜欢的人,又需要多久?

你的好友一直想对一个女孩说"I still love you very much!",可出于某种原因,他想将这句话发到网上,好让她看见。可你的好友又怕太多人知道这句话的意思,
于是他便想将这句话中的每一个字符所对应的int值转换为二进制,二进制不足8位的在前面补0,比如字符'I'所对应的int值为73,所对应的二进制为01001001.
由于你的好友还不会字符串,所以只能来求助你了。

格式

输入格式

输入一个可能带空格的字符串s,1<=strlen(s)<=1000

输出格式

将该字符串中的每个字符换成二进制,每个二进制占一行。

样例

样例输入 Copy

I still love you very much!

样例输出 Copy

01001001
00100000
01110011
01110100
01101001
01101100
01101100
00100000
01101100
01101111
01110110
01100101
00100000
01111001
01101111
01110101
00100000
01110110
01100101
01110010
01111001
00100000
01101101
01110101
01100011
01101000
00100001		

这道题很符合程序猿的浪漫,那我们来看一下这道题的解法吧

 这一道题有个特点就是我们可以将所有要转义的字母或者符号输入进去,然后用两层循环边转义边输出,这就不同于后面那道他的续集题目。

#include <stdio.h>
#include <string.h>
#define M 1000
int main()
{
    char str[M] = {0};
    int a[M] = {0},c[8] = {0};//数组a用于存放字母,数组c用存放二进制数据
    gets(str);
    int lentha = strlen(str);
    for(int i = 0; i < lentha; i++)
        a[i] = str[i];                 //将字母转换成数字
    for(int j = 0; j < lentha; j++)
    {
        for(int i = 0; i < 8; i++)
        {
            if(a[j] == 0) 
                break;
            else
            {
                //用短除法将十进制数据转义成二进制数据
                c[i] = a[j] % 2;  
                a[j] = a[j] / 2;
            }
        }
        for(int k = 7; k >= 0; k--)
            printf("%d",c[k]);
        if(j < lentha -1)
            printf("\n");
        for(int m = 0; m < 8; m++)//将用于存放二进制数据的数字清空为零。其实完全可以用memset函数
            c[m] = 0;
    }
    return 0;
}

问题 V: I still love you very much!(续)

描述

自从他学会字符串后,又陆陆续续的在qq动态上发了几条01串的说说。
你非常了解那些01串的含义:那些只包含0,1的数字串表示的是一个数的二进制,可以先将它转换为十进制。然后根据ASCII表,
可以将那个十进制的数字转换为它所对应的字符。比如说:01001001的二进制数字串,将它转换成十进制就是73。而73所对应的字符为'I';
你很好奇他发的是啥,于是便迫不及待的敲起了代码............

格式

输入格式

第一行输入一个n,(1<=n<=100)表示有n行01串。
接下来n行,每行输入一个0,1串。保证0,1串的长度一定为8。

输出格式

将那n行0,1串所对应的字符输出

样例

样例输入 Copy

27
01001001
00100000
01110011
01110100
01101001
01101100
01101100
00100000
01101100
01101111
01110110
01100101
00100000
01111001
01101111
01110101
00100000
01110110
01100101
01110010
01111001
00100000
01101101
01110101
01100011
01101000
00100001

样例输出 Copy

I still love you very much!

   哎,这道题它就是转过来转过去的玩你。其实以我的观点来看,刚做完第一题,你不适合直接去做第二题,这真的是经验之谈,我第一问是很久很久以前做出来的,思路很清晰,很快就做了出来,可是去做第二题死活也看不出来,可今天饶有雅兴的看了一下,灵感就爆发出来,也是很快就解决了,主要是这两道题虽然互为逆反,解题思路也比较清晰,但是第二题的解题思路很容易被第一题影响,哎,我废话真他喵的多,来来来,看代码:

区区24行代码,不需要过多解释吧,小白都能懂吧

#include <stdio.h>
#include <math.h>
int main()
{
    int n=0,sum=0;
    char b[10]={0};
    int a[10000]={0};
    scanf("%d",&n);  
    getchar();
    for(int i=0;i<n;i++)
    {
        sum = 0;
        sum = 0;
        gets(b);
        for(int j=0;j<8;j++)
        {
            sum =sum + (b[7-j]-'0') * pow(2,j);
        }
        a[i] = sum;
    }
   for(int j=0;j<n;j++)
        printf("%c",a[j]);
    return 0;
}

                                                                                                                 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值