• 2014华为上机题


    //2.求两个长长整型的数据的和并输出,例如输入1233333333333333。。。 3111111111111111111111111.。。。,则输出。。。。#include<stdio.h>
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    
    {
        string num1, num2;//用于保存两个长整数
       cin >> num1 >> num2;
       cout << "num1="<< num1<<",num2="<<num2<<endl;
       int len1,len2,len;
       len1 = num1.length();
       len2 = num2.length();
       len = (len1>=len2)?len1:len2 ;
       int l = len;
    
        int sum_int[len]={0};//用数组保存每位数相加之和
        string sum(len+1,'0');
    
        //cout << "sum.size=" <<  sizeof(sum_int)/sizeof(int) << "sum[0]="<< sum_int[0]<<endl;//tes
        //cout << "sum.size=" <<  sum.size() << "sum[0]="<< sum[0]<<endl;//test
    
        for(len1--,len2--;len1>=0&&len2>=0;len1--,len2--)
        {
            sum_int[len]=(num1[len1]-'0') +(num2[len2]-'0');
            cout << len << "," <<sum_int[len]<<endl;
            len--;
        }
        while(len1>=0)
        {
            sum_int[len] = num1[len1]-'0';
            len--;
            len1--;
        }
         while(len2>=0)
        {
            sum_int[len] = num2[len2]-'0';
            len--;
            len2--;
        }
    
        for(int j=l;j>=0;j--)
        {
    
            if(sum_int[j]>9)
            {
                sum_int[j-1]+=1;
                sum_int[j]=sum_int[j]%10;
            }
            //cout << sum_int[j]<<endl;
            sum[j] = sum_int[j]+'0';
        }
    
        //跳过开始的0
        int k = 0;
        while(sum[k]=='0')
            k++;
        sum = sum.substr(k,l+1);
        cout << sum << endl;
    
    }

    解法二://在第一个的基础上优化了一下,调理更清楚。

    //2.求两个长长整型的数据的和并输出,例如输入1233333333333333。。。 3111111111111111111111111.。。。,则输出。。。。#include<stdio.h>
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    
    {
        string num1, num2;//用于保存两个长整数
        cin >> num1 >> num2;
        cout << "num1="<< num1<<",num2="<<num2<<endl;
        int len1,len2,len;
        len1 = num1.length();
        len2 = num2.length();
        len = (len1>=len2)?len1:len2 ;
        int l = len;
        string sum(len+1,'0');//用于保存最后的结果
        int sum_int[len+1]= {0};//定义数组保存每位之和
    
        for(len1--,len2--; len1>=0&&len2>=0; len1--,len2--)
        {
            sum_int[len--] = (num1[len1]-'0')+(num2[len2]-'0');
        }
        while (len1>=0)
        {
            sum_int[len--] = (num1[len1]-'0');
            len1--;
        }
        while (len2>=0)
        {
            sum_int[len--] = (num2[len2]-'0');
            len2--;
        }
    
        //实现进位
        for(int i=l; i>=0; i--)
        {
            if(sum_int[i]>9)
            {
                sum_int[i-1] += 1;
                sum_int[i]%=10;
            }
            cout << sum_int[i]<<endl;
            sum[i] = sum_int[i]+'0';
        }
    
        //跳过开始的0
        int k = 0;
        while(sum[k]=='0')
            k++;
        sum = sum.substr(k,sum.size());
        cout << sum << endl;
    
    }

    第三题:

    3.通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。

    比如字符串“abacacde”过滤结果为“abcde”。

    要求实现函数:

    void stringFilter(const char *pInputStr,long lInputLen, char *pOutputStr);

    【输入】 pInputStr:输入字符串

    lInputLen: 输入字符串长度

    【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;

    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    using namespace std;
    
    
    void stringFilter( const char *pInputStr,long lInputLen, char *pOutputStr)
    {
        int arr[256] = {0};
        const char * tmp=pInputStr;
        while(*tmp++!='')
        {
            if(!arr[*tmp])
            {
                arr[*tmp] = 1;
                *pOutputStr++ = *tmp;
            }
        }
    }
    
    
    int main()
    {
        char  *str = "abbbcdddeedf";
        int len = strlen(str);//string.h  cstring
        char* outstr = (char *)malloc(len*sizeof(char));  //stdlib.h  cstdlib
        stringFilter(str,len,outstr);
        printf("%s
    ",outstr);
        free(outstr);
        outstr= NULL;
        return 0;
    }

    4.通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。

    压缩规则:

    1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".

    2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"

     

    要求实现函数:

    void stringZip(const char*pInputStr, long lInputLen, char *pOutputStr);

     

    【输入】 pInputStr: 输入字符串

    lInputLen: 输入字符串长度

    【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;

     

    void stringZip(const char*pInputStr, long lInputLen, char *pOutputStr)
    {
    
        const char * tmp = pInputStr;
        while(*tmp!='')
        {
            int count = 1;
            char character = *tmp;
            const char *char_tmp = tmp;
            while(*(++char_tmp) == character)
                count++;
            if(1 != count)
            {
                *pOutputStr++ = count + '0';
            }
            *pOutputStr++ = character;
            tmp = tmp+count;
        }
    }
    
    int main()
    {
        char  *str = "abbbcdddeedf";
        int len = strlen(str);
        char* outstr = (char *)malloc(len*sizeof(char));
        // stringFilter(str,len,outstr);
        stringZip(str,len,outstr);
        printf("%s
    ",outstr);
        free(outstr);
        outstr= NULL;
        return 0;
    }
  • 相关阅读:
    iOS开发 贝塞尔曲线UIBezierPath
    iOS开发 解决使用AVAudioRecorder录制后转mp3解决音量小的问题
    比JDK高效的array equals
    高性能web架构原则
    基于内存映射的千万级数据处理框架
    LesenRPC-基于netty/protobuffer的高性能RPC框架
    java垃圾回收机制详解
    MVC架构详解
    用抽象实现代码解耦
    python按年份统计文件数量
  • 原文地址:https://www.cnblogs.com/luolizhi/p/5760483.html
Copyright © 2020-2023  润新知