关于scanf的算法(位操作)

题目要求:输入有12行数据,每一行分别是每个月的余额。计算他们的平均值后输出。在输出时要在前面加上“$”,并在四舍五入后保留小数点后两位。

方法1:

float a,b;
main()
{
    for(;scanf("%f", &a)+1;) b+=a;
    printf("$%.2f", b/12);
}

解释:

scanf成功时返回成功读取的数据个数,失败时返回EOF(值为-1),于是scanf(...)+1的值就为0

空格、制表符、换行符都用作域分割符。%号和格式码之间的整数用来限制从对应域读入的最大字数。控制串中的其他字符,包括空格、制表符、换行符,都用于从输入流中匹配并丢弃。如输入流“10t20”,scanf(%dt%d, &a, &b),把10和20分别放入a和b中,t被丢弃。

方法2:

float a,b;
main()
{
    for(;~scanf("%f", &a);) b+=a;
    printf("$%.2f",b/12);
}

解释:

内存以补码表示负数,32位二进制位表示1为00000000000000000000000000000001,则-1为11111111111111111111111111111111(1取反+1)。一元操作符~的作用是按位取反,所有位都会反转

时间: 2024-12-25 05:25:58

关于scanf的算法(位操作)的相关文章

[LeetCode]位操作有关的算法设计

在进行位操作算法设计之前,先了解位操作的一些细节知识点: 1. 位操作数据溢出的结果 2. 数据位提升的隐式转换 http://www.cnblogs.com/grandyang/p/4606334.html

scanf控制用户输入数据的合法范围_算法_c语言

如题: 要求用a,b,c三个整型变量来存储用户户输入3个值. 看程序实现: #include <stdio.h> int main() { int a = 0, b = 0, c = 0; while( (a * b *c < 1 && (a<1 || b<1 || c<1)) &&( scanf("%d%d%d", &a, &b, &c ) <= 3)) { fflush(stdin);

位操作Bit Operation算法题

这是一道看完答案会觉得很简单,但做之前很难想到答案的题目!!! 不信? Let us go ! 题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 题目解析 根据题目描述,由于加上了时间复杂度必须是O(n),并且空间复杂度为O(1)的条件,因此不能用排序方法,

C语言位操作的算法

1.头文件 1 #ifndef _INC_BITOPERATION 2 #define _INC_BITOPERATION 3 #endif 4 /* 5 封装了所有的位操作运算 6 */ 7 #include<stdio.h> 8 #include<stdlib.h> 9 10 /************************四字节操作,如int ,long等类型**********************/ 11 12 /*置位int数num的第N个位*/ 13 void s

大整数算法[04] 位操作

上一篇文章介绍了大整数的比较操作,今天来谈谈和位相关的操作. ★ 引子         在大整数的表示和相关定义这篇文章中讲到了大整数是如何表示的.为了方便后面的讲解,这里先按照前面的定义,给出一个大整数的例子(32位系统下,每一个数位长度为32比特): 假设有一 bignum x,十进制值为 1134924633606254832,对应的十六进制值为 0xFC00FF0F0F0F0F0,那么按照大整数的表示方法, 2^32 进制就表示成(每一位用逗号隔开): (264245232,404232

旧文-Bitsort排序算法-2007-10-10 16:08

<Programming pearls>中有对该算法的介绍. 该算法的复杂度为O(X),X为欲排序的最大的数.不适合于有重复数据的排序,重复的数据会被当作一个数据输出. 还是看代码吧! c程序实现:选自<Programming pearls> /* bitsort.c -- bitmap sort from Column 1 * Sort distinct integers in the range [0..N-1] */ #include <stdio.h> #def

[算法] N 皇后

N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行.同一列.同一斜线上的皇后都会自动攻击). 一. 求解N皇后问题是算法中回溯法应用的一个经典案例 回溯算法也叫试探法,它是一种系统地搜索问题的解的方法.回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试. 在现实中,有很多问题往往需要我们把其所有可能穷举出来,然后从中找出满足某种要求的可能或最优的情况,从而得到整个问题的解.回溯算法就是解决这种问题的“通用算法”,有“万能算法

递推算法与二分算法

递推算法: (一)斐波那契数列 以下数列0 1 1 2 3 5 8 13 21 …被称为斐波纳契数列. 这个数列从第3项开始,每一项都等于前两项之和. 输入一个整数N,请你输出这个序列的前N项. 输入格式 一个整数N. 输出格式 在一行中输出斐波那契数列的前N项,数字之间用空格隔开. 数据范围 0<N<460<N<46 输入样例: 5 输出样例: 0 1 1 2 3 #include<iostream> using namespace std; int f[100];

字符串的模式匹配中的算法

字符串的模式匹配是一个比较经典的问题:假设有一个字符串S,称其为主串,然后还有一个字符串T,称其为子串. 现在要做的是,从主串S当中查找子串T的位置,如果存在返回位置值,如果不存在返回-1.另外主串又称为目标串, 子串称为模式串. 暴力匹配算法 这是一个经典的串匹配问题,涉及的算法也比较多,先讨论第一种简单的暴力算法,思路如下 将主串S的第pos个字符 与 子串T的第一个字符比较, 若相同,继续比较子串和主串后面的字符. 若不相同,那么从主串S的第(pos + 1)个字符开始继续向后匹配,直到匹