几个小程序

 实现的几个小程序:

1.要写一个函数,传三个参数,double,int ,bool  三个参数。   

    作用就是:传double进来 用int来取小数位数  ,bool用来确认是否要四舍五入。 
    返回的为string 值。
    例如: 
    如果传一个double的 如12345.6789  
    然后传一个int 进来 如 3 
    然后要使这个double保留3位小数 12345.679 
    Bool的是控制是否四舍五入。 
    返回的为string 的值。
 


    方法1:

  1. #include<stdio.h>
  2. #include<iostream>
  3. using namespace std;
  4. string doubleConvert(double dval,int nlen ,bool bval)
  5. {
  6.     char buf[100];
  7.     sprintf(buf,"%lf",dval);
  8.     int buf_len = strlen(buf);
  9.     int point_pos = char_traits<char>::find(buf, buf_len,'.')-buf;
  10.     int total_len = point_pos+nlen;
  11.     if ( buf_len > total_len && bval && buf[total_len+1]>='5') buf[total_len]+=1;
  12.     buf[total_len+1] = '/0';
  13.     return buf;
  14. }
  15. int main()
  16. {
  17.     double dval = 12345.6789;
  18.     string str = doubleConvert(dval,3,true);
  19.     cout << str.c_str();
  20.     return 0;
  21. }

 

        方法2:

 

  1. #include <math.h>
  2. #include <iostream>
  3. #include <string>
  4. using namespace std;
  5. string doubleConvert(double dval,int nlen ,bool bval)
  6. {
  7.     double d = bval ? 0.5 : 0;
  8.     double n = pow(10.0, nlen);
  9.     char buf[128] = {0};
  10.     char format [128] = {0};
  11.     sprintf(format, "%%.%dlf", nlen);
  12.     sprintf(buf,format,(int)(dval*n+d)/(double)n);
  13.     
  14.     return buf;
  15. }
  16. int main()
  17. {
  18.     double dval = 12345.6789;
  19.     string str = doubleConvert(dval,3,true);
  20.     cout << str <<endl;
  21.     return 0;
  22. }

2. 把一个整数的各个位相加,得出另外一个整数,然后再将此整数的各个为相加,直到得出的整数小于10 为止(用递归的方法 实现)。
    如:20081029 --〉22 --〉4

 

  1. #include <iostream>
  2. using namespace std;
  3. int Get(int n)
  4. {
  5.     int i = 0;
  6.     while (n) i+=n%10,n/=10;
  7.     return i < 10 ? i : Get(i);
  8. }
  9. int main()
  10. {
  11.     cout << Get(20081029) << endl;
  12.     return 0;
  13. }

3.  把任意一个整数转化为顺序相反的整数。 如:632 --〉236; 1024 --〉4201

 

  1. #include <iostream>
  2. using namespace std;
  3. int Rev(int n)
  4. {
  5.     int i = 0;
  6.     while (n) i=i*10+n%10,n/=10;
  7.     return i;
  8. }
  9. int main()
  10. {
  11.     cout << Rev(20081029) << endl;
  12.     return 0;
  13. }

4.  将字符串倒序

  1. #include <iostream>
  2. using namespace std;
  3. void resort( char* pStr ) //字符串倒序
  4.     int nLen = strlen( pStr ); 
  5.     int nLoopCount = nLen / 2; 
  6.     for ( int i = 0; i < nLoopCount; i ++ ) 
  7.     { 
  8.         char c = pStr[i]; 
  9.         pStr[i] = pStr[nLen-i-1]; 
  10.         pStr[nLen-i-1] = c; 
  11.     } 
  12. int convert(int temp)
  13. {
  14.     char str[10];
  15.     itoa(temp,str,10);//把整数转成字符串
  16.     resort(str);
  17.     return atoi(str);//返回时,把字符串转成整型
  18. }
  19. int main()
  20.     int x=1023;
  21.     cout<<convert(x)<<endl;
  22.     return 0;
  23. }

 5. 给定数组 A(N),找出其中相距最近的两个数。距离 R=|A[i+1]-A[i]|

     即:在一个数组中找出相邻两个元素之间相差最小的,R=|A[i+1]-A[i]|,不是所有元素中,而是相邻元素中。

方法1:

template <typename T>
int near(T* a, int n)
{
   int mi = 0;
   T dif = a[1] - a[0];
   for(int i = 1; i< n - 1; ++i){
     T absv = (a[i+1]<a[i]?a[i]-a[i+1]:a[i+1]-a[i]);
     if(absv < dif){
       dif = absv;
       mi = i; 
     } 
   } 
   return mi;
}

#include <iostream>
using namespace std;

int main()
{
   int a[5] = {3,9,5,2,7};
   int i = near(a, 5);
   cout<<a[i]<<","<<a[i+1]<<endl;
   return 0; 
}

 

方法2:

#include <iostream>
#include <math.h>
using namespace std;

#define N 6

int find(int* a)
{
   int min = 1000, ind = -1;
   if(N <= 2){
     return 0; 
  } 
  else{
    for(int i = 0; i < N - 1; ++i){
       if(abs(a[i]-a[i+1]) < min){
          min = abs(a[i] - a[i+1]);
         ind = i;
       } 
    } 
  }
 return ind;
}

 

int main()
{
   int a[N] = {3,9,5,2,7,6}; 
   int index = find(a);
   cout<<"The element is:"<<a[index]<<","<<a[index+1]<<endl;
   return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值