加法计算器

初始代码:

#include <stdio.h>
int main() {
    
    
    int first;
    int second;
    scanf("%d+%d", &first, &second);
    printf("=%d", first + second);
    return 0;
}

修改后:

#include <stdio.h>
int main() {
    
    
    int first;
    int second;
    char operator;
    
    scanf("%d%c%d", &first,&operator, &second);
    if(operator == '+'){
    
    
        printf("=%d",first + second);
    } 
       else if(operator == '-'){
    
    
        printf("=%d",first - second);
    } 
       else if(operator == '*'){
    
    
        printf("=%d",first * second);
    } 
       else if(operator == '/'){
    
    
        printf("=%d",first / second);
    } 
        else(operator == '%'){
    
    
        printf("=%d",first % second);
    } 

    return 0;
}

C ++版本:

#include <bits/stdc++.h>

using namespace std;

int main() {
    
    
	
	int a, b;  // 运算的整数 
	char op;  // 操作符,+ - * / % 均是字符 
	cin >> a >> op >> b;  // 注意输入的顺序 
	switch (op) {
    
      // switch 语句的常量表达式可以是字符型 
		case '+':  // 若 op == '+',则输出 a + b 的值 
			cout << a + b;
			break;  // 记得要 break 
		case '-':  // 若 op == '-',则输出 a - b 的值 
			cout << a - b;
			break;  // 记得要 break
		case '*':  // 若 op == '*',则输出 a + b 的值 
			cout << a * b;
			break;  // 记得要 break
		case '/':  // 若 op == '/',则要先判断除数是否为 0
			// 若除数为 0,则输出 Error,否则输出  a / b 的值 
			if (b == 0) cout << "Error";
			else cout << a / b;
			break;  // 记得要 break
		case '%':  // 若 op == '%',则输出 a % b 的值 
			cout << a % b;
			break;  // 记得要 break
		default:  // 若是其他符号,则输出 Invalid operator 
			cout << "Invalid operator";
	} 
	
	return 0;
}

根据用户的输入整数判断整数的二进制里含有多少个1

/*
    根据用户的输入整数判断整数的二进制里含有多少个1
*/
#include<iostream>
using namespace std;
int main()
{
    
    
    int count=0;//计数
    int number;
    printf("please input a number");
    cin>>number;
    for(;number;number=number>>1)
    {
    
    
        if (number&1==1)
        count++;
    }
    cout<<count<<endl;
    return 0;
}

怎样判断一个整数的二进制表示有几个1(或0)

作者:mrbean
来源:https://www.cnblogs.com/mrljc/archive/2014/01/20/3527576.html

看到这个问题我们的第一反应就是根据二进制的位直接统计,这也是我已开始想到的,于是有了如下代码

image
这份代码的逻辑很清晰,就是将这个数慢慢的移,每一位都进行判断最终得出结果,乍一看没什么错误。并且进行测试会发现对于正整数它运行的非常好,没有什么错误,但是我们尝试一下负整数就会发现他有巨大的问题。

这里首先要提一下,计算机对负数的存储是按照其正数的补码表示的,所以进行这种简单的移位判断就不可避免的会出现错误。

这里我们就要提到第二中解法,这种方法不金额以解决负数的问题,而且可以提高算法的效率。先看代码:
在这里插入图片描述

image

这种解法的精髓就在image这个操作上面,我们首先要考虑x和x-1的二进制的差别在哪,我们列出几个
在这里插入图片描述

image

从这些例子我们不难发现,这两个数存在着这么一个关系:x的最后一个一变成了零,其后(可能没有)的零变成了一。于是我们可以发现只要将两个数进行与操作,那么最后一个一以及它后面的就都置零了,通过判断可以进行多少次这样的操作就可以知道有多少个一。

判断有多少零只需要将判断改一下就好。

猜你喜欢

转载自blog.csdn.net/CSDN_YJX/article/details/113651552