求小数位数个数
问题描述
明明最近在一家软件公司实习,公司分配给他一个任务,要他写一个小程序,这个程序的功能是求出一个浮点数的小数部分的长度。例如程序输入1.1,则输出1,程序输入1.11,则输出2,明明觉得这个非常简单,花了不到5分钟的时间就把程序给写出来了,然后就把程序交给了测试员测试。但是没有想到的是,经过测试员的测试,发现了一大堆的错误,返回的结果很多都是不对的,这个令明明相当的不解,始终想不通自己的程序错在哪里。你是一名经验丰富的程序员,明明把这个问题来求助于你,明明和你说了他的想法,你一听就明白明明错在了哪里,原来明明使用double型来存放浮点数,但是由于double型的精度问题,不可能把所有的小数都精确的保存好,如果小数位数很长,就会出错。你发现了问题。现在请你写出正确的程序。 明明的问题可以归结为:给你一个浮点数,请你求出这个浮点数的小数位数。
个人总结
写题时不能仅满足 常规输入正确,还要考虑边界情况:比如输入包含多个小数点(12.34.56)、小数点后有非数字字符(12.3a45)、小数点在末尾(123.)等
cpp
#include <iostream>
//#include <vector>
//#include <string>
//#include <algorithm>
//#include <cmath>
#include <iomanip>
//#include <set>
#include <sstream>
//#include <bits/stdc++.h>
using namespace std;
int main(){
string num;
while(cin >> num){
bool tag = false;
int count = 0;
for(int i = 0;i < num.size() ;i++){
if(tag) {
count++;
}
if(num[i] == '.'){
tag = true;
}
}
cout << count << endl;
}
return 0;
}
进制转换
问题描述
输入一个十进制数,将其化成N进制数输出(2≤N≤16)。 输出结果时,大于等于10的数字用字母代替,A代表10,B代表11以此类推。
个人总结
- 取余法转进制的核心逻辑要牢记:
十进制转任意进制的核心是 "除基取余,逆序排列":
不断对目标进制取余,得到每一位的数字 / 字母;
取余结果是逆序的,最终需要反转字符串;
负数需先记录符号,转为正数处理后补回负号。
这个逻辑是进制转换的通用方法,适用于 2-36 进制的转换场景。
cpp
#include <iostream>
//#include <vector>
//#include <string>
#include <algorithm>
//#include <cmath>
#include <iomanip>
//#include <set>
#include <sstream>
//#include <bits/stdc++.h>
using namespace std;
string transform(long long num,int n){
char c;
string s1;
if(num == 0){
c = '0';
s1 += c;
return s1;
}
while(num){
if((num % n) < 10){
c = '0' + num%n;
s1 += c;
}
else{
c = 'A' + num%n - 10;
s1 += c;
}
num /= n;
}
string s2 = s1;
reverse(s2.begin() ,s2.end() );
return s2;
}
int main(){
long long num;
int n;
while(cin >> num >> n){
string s;
s = transform(num,n);
cout<< s << endl;
}
return 0;
}
表达式求值
问题描述
以字符串形式输入仅有整数和加减(正负)号构成的表达式,输出该表达式的值。
个人总结
-
可以先优化字符串格式,让空格什么的去掉
-
对数字加见的操作要在后面,否则会漏一项
cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
string input_str;
while (cin >> input_str) {
string clean_str;
for (int i = 0; i < input_str.size(); i++) {
if (input_str[i] != ' ') {
clean_str += input_str[i];
}
}
string expr_str = "+" + clean_str;
int total = 0;
int index = 0;
while (index < expr_str.size()) {
char sign = expr_str[index];
index++;
int number = 0;
while (index < expr_str.size() && isdigit(expr_str[index])) {
number = number * 10 + (expr_str[index] - '0');
index++;
}
if (sign == '+') {
total += number;
} else {
total -= number;
}
}
cout << total << endl;
}
return 0;
}
计算机英语翻译
六、程序设计
一个程序是一系列的指令集,它告诉电脑的硬件要对数据执行哪些操作。程序可以被硬件自身创造(内置于),或者它可能独立的以一种被叫做软件的形式存在。在一些特别的领域(在一些专用),或"故意的"(定制化),电脑的操作指令被嵌入进了电路系统;寻常的例子就比如微电脑里的计算机(计算器),腕表(手表),汽车引擎,和微波炉 (里的微型计算器)。一个总目标电脑(通用计算机),在另一方面,尽管它包含了一些内置的程序(在只读存储器ROM)或者指令(在处理器chips片段里),取决于额外的程序去执行有效的任务(但他依赖外部的程序来执行有用的任务)。只要一个计算机已经被程序设计了(被编程),它能做的最多或者最少的都取决于软件的控制,给予它时令去使它能够去做(他在给定时刻所能完成的任务,都取决于控制它的软件)。软件最广泛的应用包括一个大范围的应用程序(广泛使用的软件包括各种应用程序)-指令去告诉计算机如何处理复杂的任务
①specialized 专用的
②dedicated 定制化的
③embed in 嵌入
④circuitry n.电路
⑤chip n.芯片
单词打卡
