poj3077---进位

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
char str[100000000];
int ar[100000000];
int main()
{
    int n,len,i;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%s",str);
        len=strlen(str);
        for(i=0;i<len;i++)
        {
            ar[i]= str[i] - ‘0‘;
        }
        for(i=len-1; i >= 1; i--)//至少是两位才会经过这个循环
        {
            if(ar[i] >= 5)
                ar[i-1]++;
            ar[i]=0;
        }
        for(i=0; i<len; i++)
            printf("%d",ar[i]);
        printf("\n");
    }
    return 0;
}

题意:给一个数字,然后从最后一位开始进位,满5进1,小于5变成0,比如 12345 -> 12350->12400->12000->10000;实际上:>=10的数,除第一位以外都会变成0,只需要看第一个数最后是多少

int main()
{
    int n;
    double tmp;
    scanf("%d",&n);
    while(n--)
    {
        int count=0;
        scanf("%lf",&tmp);
        while(tmp >= 10)
        {
            tmp/=10;
            tmp=(int)(tmp+0.5);
            cout++;
        }
        for(i=0;i<count;i++)
        {
            tmp*=10;
        }
    }
}

323/10=32.3+0.5

取整得32

32/10=3.2+0.5=3.7

取整得3

四舍五入的方法是(int)(x + 0.5)

这道题关键是对于一个数的每一位来说,四舍五入,>=5进,<5舍,进到第一位就行,后面再添0

时间: 2024-08-01 06:31:15

poj3077---进位的相关文章

进位制 与成熟表示

1:移位运算符 #include<stdio.h> int main() { printf("%d ",18>>1); // 移位运算符 也就是 乘以2^? 后面的 是 进位 的 位数. printf("%d ",18<<1); // 除以2^? 后面的 是 退位 的 位数 }

SQL Server获取下一个编码字符串的实现方案分割和进位

我在前一种解决方案SQL Server获取下一个编码字符实现和后一种解决方案SQL Server获取下一个编码字符实现继续重构与增强两篇博文中均提供了一种解决编码的方案,考虑良久对比以上两种方案的,后一种方案虽然解决了其中方案的缺点,但是依然存在的编码字符串长度的限制(最多满足8位长度),本博文提供的方案将编码字符串长度增加到19位,也可以足够项目中实现这些编码. 具体的编码规则可以参看以上两种解决方案博文中的描述,也可以进入SQL Server 大V潇湘隐者的获取下一个编码字符串问题这篇博文.

汇编语言中溢出和进位的区别

of的设置,以加法为例,如果两数符号相同,结果却相反,则of=1:否则of=0:(如果两数符号相反,是不会溢出的).cf的设置,最高有效位(bit7,比如)向高位进位则为1,否则为0.所以实际上of是表示有符号数的溢出,cf是表示无符号数的溢出.理解进位,从af位的设置更为容易.

每日算法之四十八:Plus One (数组表示的十进制加一进位)以及求Sqrt(x)

给定数组表示的十进制数,加一操作.结果依然用十进制的数组表示.这里主要注意最高位(digit[0])依然有进位,即溢出的情况. Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored such that the most significant digit is at the head of the list. <span style=

Codevs 2898 卢斯的进位制

时间限制: 1 s 空间限制: 32000 KB 题目等级 : 青铜 Bronze 题解 题目描述 Description 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如下图: 其含义为: L+L=L,L+K=K,L+V=V,L+E=E K+L=K,K+K=V,K+V=E,K+E=KL         …… E+E=KV + L K V E L L K V E K K V E KL V V E KL KK E E KL KK KV 根据这些规则可推

verilog设计十进制计数器(含进位位)

十进制计数器: 设计要求: 1.每当计数器值为4'b001时,自动回到4'b0000 2.每个时钟沿计数器值加1 3.进位输出carry应该与4'b1001同周期输出 4.异步复位 module cnt10 ( clk, rst_n, carry, cnt ); input clk, rst_n; output carry; output [3:0] cnt; reg carry; reg [3:0] cnt; always @( posedge clk or negedge rst_n ) b

Leetcode2---&gt;链表中对应位相加(进位)

题目: 给定两个单链表,单链表中的数都是非负数.链表中的数字都是反向存储的,,每个节点都是个位数,将链表对应的位相加,返回最终的结果: 举例: Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)Output: 7 -> 0 -> 8 解题思路: 其本质是将链表1和链表2反转之后,对应位相加且进位,结果进行反转,比如上述例子中:342+465 = 807:但由于链表是单链表,不能从后往前遍历,因此可以转换为从前向后加,向后进位,即243+564=70

LeetCode:Add Two Numbers - 两个链表逐项做带进位的加法生成新链表

1.题目名称 Add Two Numbers (两个链表逐项做带进位的加法生成新链表) 2.题目地址 https://leetcode.com/problems/add-two-numbers/ 3.题目内容 英文:You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a

JS进位取舍和产生随机数结合

一.进位取整 最开始,先来看一下JS中进位取舍的几个小示例: //JS进位取舍 //向上取整 alert(Math.ceil(25.9)); //打印:26 alert(Math.ceil(25.5)); //打印:26 alert(Math.ceil(25.1)); //打印:26 //向下取整 alert(Math.floor(25.9)); //打印:25 alert(Math.floor(25.5)); //打印:25 alert(Math.floor(25.1)); //打印:25 /

小学生算术-java&amp;c-统计俩个整数相加时发生多少次进位

问题描述:计算俩个整数在相加时需要多少次进位,处理多组数据,直到输入俩个0. 1.java import java.util.Scanner; /** * 统计两个数字在相加的时候需要多少次进位,结束标志 输入俩个零 * @author NEU-2015 * */ public class Demo { public static void main(String[] args) { Scanner input = new Scanner(System.in); int a = 0; int b