C++编写小程序
对任意输入的小于1的并且只有3位尾数的实数,分别求出其各位数字并输出。要求输出的各数字之间要空2格。例如,输入为0.368时,输出结果为‘0368’。...
对任意输入的小于1的并且只有3位尾数的实数,分别求出其各位数字并输出。要求输出的各数字之间要空2格。例如,输入为0.368时,输出结果为‘0 3 6 8’。
展开
5个回答
展开全部
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
bool EndAsThree(char str[]){
int lenN=0,index=0;
bool flag=false;
while (index<strlen(str)){
if(flag) {
lenN++;
index++;
}
else{
if(str[index++]=='.') flag=true;
else continue;
}
}
if(lenN==3) return true;
else return false;
}
void OutputD(char dstr[]){
double n;
char *p;
int i;
p=dstr;
n=atof(p);
if(n<1.0){
if (EndAsThree(dstr)) {
for (i=0;true;i++){
if (dstr[i]!=' '){
if(dstr[i]=='.') continue;
cout<<dstr[i]<<" ";
}
else break;
}
cout<<endl;
}
else cout<<"不符合实数为3位尾数的"<<endl;
}
else cout<<"该实数不小于1"<<endl;
}
int main(){
char dstr[100];
for (int i=0;i<100;i++) dstr[i]=' ';
cout<<"请输入一个小于1并且只有3位尾数的实数:";
cin>>dstr;
OutputD(dstr);
return -1;
}
追问
第九行报错,error: 'strlen' was not declared in this scope?
改成#include之后就没错了,完美运行
追答
我的编译器没有报错,是C++语言为了兼容C语言才使用.h的。
展开全部
#include<iostream>
#include<string>
#include<vector>
using namespace std;
void Out (double num)
{
vector<int> vtem;
if(((num*1000-(int)(num*1000))==0)&&((num*100-(int)(num*100))!=0))
{
int temp=num*1000;
while(temp>0)
{
vtem.push_back((temp%10));
temp=temp/10;
}
for(vector<int>::reverse_iterator riter=vtem.rbegin();riter!=vtem.rend();riter++)
{
cout<<*riter<<" ";
}
}
}
void main()
{
double num=0;
cin>>num;
Out(num);
}
我是纯菜鸟...大神勿喷...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <iostream>
#include <string>
using namespace std;
void main()
{
double a;
int k;
cout<<"输入:"<<endl;
cin>>a;
while(a<0||a>=1)
{
cout<<"您的输入不正确,重新输入:"<<endl;
cin>>a;
}
k=a*1000;
cout<<"0"<<" "<<(k/100)<<" "<<(k-k/100*100)/10<<" "<<(k-k/100*100)%10<<endl;
}
#include <string>
using namespace std;
void main()
{
double a;
int k;
cout<<"输入:"<<endl;
cin>>a;
while(a<0||a>=1)
{
cout<<"您的输入不正确,重新输入:"<<endl;
cin>>a;
}
k=a*1000;
cout<<"0"<<" "<<(k/100)<<" "<<(k-k/100*100)/10<<" "<<(k-k/100*100)%10<<endl;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
方法1:
char buf[100];
scanf("%s", buf);
char *pos= strrchr(buf, '.');
if(strlen(pos)>3)
{
printf("\n0 %c %c %c\n", pos[1], pos[2], pos[3]);
}
方法2:
double num = 0.0;
scanf("%0.3lf", &num);
num -= static_cast<int>(num);
int a=num*10;
int b=int(num*100)%10;
int c=int(num*1000)%10;
printf("\nOutput:\n0 %d %d %d\n", a, b, c);
char buf[100];
scanf("%s", buf);
char *pos= strrchr(buf, '.');
if(strlen(pos)>3)
{
printf("\n0 %c %c %c\n", pos[1], pos[2], pos[3]);
}
方法2:
double num = 0.0;
scanf("%0.3lf", &num);
num -= static_cast<int>(num);
int a=num*10;
int b=int(num*100)%10;
int c=int(num*1000)%10;
printf("\nOutput:\n0 %d %d %d\n", a, b, c);
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main()
{
float a;
cout<<"cin a num"<<endl;
cin>>a;
stringstream oss;
oss<<a;
string b;
oss>>b;
for(int i=0;i<b.size();i++)
{
if(b[i]=='.')continue;
cout<<b[i]<<" ";
}
cout<<endl;
return 0;
}
楼主可以试试~
#include<string>
#include<sstream>
using namespace std;
int main()
{
float a;
cout<<"cin a num"<<endl;
cin>>a;
stringstream oss;
oss<<a;
string b;
oss>>b;
for(int i=0;i<b.size();i++)
{
if(b[i]=='.')continue;
cout<<b[i]<<" ";
}
cout<<endl;
return 0;
}
楼主可以试试~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询