C++ 16位整数拆分求和

题目要求如下:

有一个 16 位的整数,每 4 位为一个数,写函数求他们的和。例:

整数: int a=1101010110110111;

:   int sum=1101+0101+1011+0111;

用十进制做参数,计算时按二进制考虑。

答案为36

思路:把字符串存入char数组,数组会产生下标。输入对应的下标完成分割,例如我想分割从0到3的部分,之后用for循环扫描这一部分,该部分的数会进入二进制计算器进行计算。

二进制计算器:没有采用“逢2进1”的进位思想,而是采用了幂的思想。例如1101,最右边的一位,需要乘以2的0次方;最左边的一位,需要乘以2的3次方。为简化代码,直接使用数组存储相应的数值[1,2,4,8],遇到右边第一位直接读取1,乘以1;遇到第二位直接读取2,乘以2即可。

代码如下:

#include<iostream>
using namespace std;
int SumFuction(char s[],int end,int start) {//进制转化函数,注意是从右往左读
//输入字符串char s[],开始的位置start,结束位置end,
//函数执行功能:字符串从start到end的字符将转化为相应的十进制数并输出
//例:输入字符串1101 输出十进制数13
    int power[] = { 1,2,4,8 };//二进制右上角的幂
    int countpower = 0;//位数
    int s1 = 0;//s1为字符串s的1-4位的和
    for (int i = start; i >= end; i--, countpower++) {//从左往右第二位开始,使用幂运算 8 4 2 0
        s1 = s1 + (s[i] - 48) * power[countpower];//s[i]以ASCII码参与运算,0存储为48,要减去相应数值
    }
    return s1;
}

int main() {
    char s[] = "1101010110110111";
    int s1=SumFuction(s,0,3);//截取字符串0-3位的数,计算其值
    int s2 = SumFuction(s, 4, 7);
    int s3 = SumFuction(s, 8, 11);
    int s4 = SumFuction(s, 12,15);
    cout << "十六位数分割后求和为" << s1 + s2 + s3 + s4 << endl;
    return 0;
}

 运行截图如下:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值