二进制大整数转化为十进制数

输入为一个二进制大整数(大整数大于0,不带符号,无前导0,至少1位数字,且不超过100位数字)。要求将该整数转换成十进制数,并输出。
建议:用字符数组存储大整数

3个回答

把二进制数按权位展开相加就得到了十进制数了

二进制的最后一位乘以二的零次方加倒数第二位乘以二的一次方,加倒数第三位乘以二的二次方,以此类推,直到算出最大位。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
求二进制转十进制代码
输入为一个二进制大整数(大整数大于0,不带符号,无前导0,至少1位数字,且不超过100位数字)。要求将该整数转换成十进制数,并输出。 建议:用字符数组存储大整数。 求代码
c++中如何把一个十进制整数转换成二进制然后统计其中1的个数
c++中如何把一个十进制整数转换成二进制然后统计其中1的个数
C语言十进制转换成二进制(可转换小数)哪里出错了?
// #include <stdio.h> #include<stdlib.h> #define decimalnum 8//小数二进制位数 void main() { char Integerbuffer[100];//整数 char decimalbuffer[20];//小数 float number; double decimalnumber,a; long value; int i; printf("请输入需要转换成二进制的十进制数:"); scanf("%f",&number); //printf("\n%f\n",number); value=(long)number; a=decimalnumber=number-value; //printf("%f\n",decimalnumber); itoa(value, Integerbuffer, 2); // 将value 转为存成2进制之字串 printf("整数的二进制为%s\n",Integerbuffer); //printf("%s",itoa(value, Integerbuffer, 2)); while(a>0.0) { decimalbuffer[i]='0'+(int)(a*2); //printf("%d",(int)(a*2)); a=a*2-(int)(a*2); if (i++==decimalnum) break; } decimalbuffer[i]='\0'; printf("小数的二进制形式为.%s\t\n",decimalbuffer); printf("%f的二进制为%s\.%s\n",number,Integerbuffer, decimalbuffer); system("pause"); }
c++针对二进制补码算术中整数的算术运算问题,请大神指点
c++ 二进制问题请教 以下程序针对二进制补码算术中整数的算术运算问题,要求先确定一个bit pattern size ,然后第一个函数要把输入的两个整数转化为二进制输出,第二个函数把两个二进制数相加输出,第三个函数再把结果转化回十进制。 只使用c++字符串数据类型,不使用任何数组变量。不改变主程序也不更改函数名,实现缺失函数,使程序运行正确。可编写额外的帮助函数,从函数中调用但不能对程序做修改。 需要使用c++字符串数据类型来表示这两个二进制补码的表示形式,不能使用任何数组变量,可使用字符串变量作为一个整体或使用索引访问字符串中变量中的字符。 程序示例运行如下 输入位模式大小的正整数:5 输入整数A:9 输入整数B:-14 十进制 9 + -14 = -5 二进制补码9 是 01001 二进制补码-14 是 10010 01001和10010的二进制和是11011。 在二进制补码计算中,9+ -14=-5。 #include iostream> #include cmath> #include string> using namespace std; int main() { //Read in the bit pattern size int L; do { cout << "Enter positive integer for the bit pattern size "; cin >> L; }while (L <= 0); //Read in two integers a and b int a, b; cout << "Enter an integer a "; cin >> a; cout << "Enter an integer b "; cin >> b; //Calculate the decimal arithmetic sum of a and b and print the result int c1 = a + b; cout << "In decimal " << a << " + " << b << " is " << c1 << endl; //Compute the two's complement representations of a and b //Each integer must be represented in L-bits pattern //Also these two's complement representations must be returned as string data types string A = decimalToTwocomplementString(a, L); string B = decimalToTwocomplementString(b, L); //Print the two's complement representations of a and b cout << "The two's complement of " << a << " is\t " << A << endl; cout << "The two's complement of " << b << " is\t " << B << endl; //Compute the binary sum of the two's complement representations of a and b //The result must be returned as L-bit pattern string data type string C = TwoComplementStringAddition(A, B); //Print the two's complement representation binary sum cout << "The binary sum of " << A << " and " << B << " is " << C << endl; //Convert the two's complement representation binary sum to decimal and print int c2 = TwoComplementStringToDecimal(C); cout << "In two's complement arithmetic, " << a << " + " << b << " is " << c2 << endl; //Print some concluding results if (c1 == c2) cout << c1 << " is equal to " << c2 << ". Good Job!" << endl; else { cout << c1 << " is not equal to " << c2 << endl; cout << "Either " << c1 << " cannot be represented by the given bit pattern OR we have made some mistake!" << endl; } system("Pause"); return 0; } **_原程序拷屏如下:_** ![图片说明](https://img-ask.csdn.net/upload/201807/06/1530848793_765945.jpg) ![图片说明](https://img-ask.csdn.net/upload/201807/06/1530848804_675124.jpg)
超过16位且最后一位是1的整数会出现一个奇葩的问题
之前在牛客做笔试题时发现了这样一个问题 : 定义c为10011100011101111的字符串,不管是显示转换还是隐式转换最后出来的数字都是10011100011101112 ![图片说明](https://img-ask.csdn.net/upload/201709/25/1506350975_158383.png) 更进一步实验发现,把10011100011101111赋予变量oo,再输出oo,结果为10011100011101112 ![图片说明](https://img-ask.csdn.net/upload/201709/25/1506351359_34256.png) 目前通过实验发现超过16位且最后一位是1的整数在字符串/数字相互转换的时候会出现问题,并且出现问题的直接原因是定义之后这些数字会比原值多1,但这个范围并没有超出js能够表示的最大范围 一下几个数大家可以试一下 10001000101111011 10001000111011111 10011100011101111 10101111110010001 10101111110101111 发现这个问题的笔试题是牛客网上《2017校招真题编程练习》中有一道来自京东的《幸运数》,题目要求找出这样子的十进制数:十进制下每一位的和等于转为二进制后每一位的和。在解题的过程中发现有些十进制的数在转二进制后两种表示方式表示出来的值不一样——这样就是为什么前面举的例子中的数字看起来都像二进制数。
Java实现十六进制转八进制和十进制?
(1)问题描述   从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。   注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。 样例输入 FFFF 样例输出 65535 (2)问题描述   给定n个十六进制正整数,输出它们对应的八进制数。 输入格式   输入的第一行为一个正整数n (1<=n<=10)。   接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。 输出格式   输出n行,每行为输入对应的八进制正整数。   【注意】   输入的十六进制数不会有前导0,比如012A。   输出的八进制数也不能有前导0。 样例输入   2   39   123ABC 样例输出   71   4435274   【提示】   先将十六进制数转换成某进制数,再由某进制数转换成八进制。
C语言问题求解答!!!!
绝对素数是指本身是素数,其逆序数也是素数的数。例如:10321与12301是绝对素数。 编程实现:键盘输入一个整数n,输出小于n的所有绝对素数。 要求:编写函数int isprime(int x)实现测试参数x是否为素数;编写函数int convert(int x),返回参数x的逆序数。main中完成输入输出与函数调用。 编写十进制数到二进制、八进制、十六进制间的转换程序。要求:键盘输入一个十进制的数,输出其对应的二进制、八进制、十六进制数。小数部分可以只输出8位以内
求大佬解决一道 2^k进制数 算法题,我不知道哪里出错了,谢谢
设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数。 (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位。     (3)将r转换为2进制数q后,则q的总位数不超过w。 在这里,正整数k(1≤k≤9)和w(k  问:满足上述条件的不同的r共有多少个?   我们再从另一角度作些解释:设S是长度为w 的01字符串(即字符串S由w个“0”或“1”组成),S对应于上述条件(3)中的q。将S从右起划分为若干个长度为k 的段,每段对应一位2^k进制的数,如果S至少可分成2段,则S所对应的二进制数又可以转换为上述的2^k 进制数r。   例:设k=3,w=7。则r是个八进制数(23=8)。由于w=7,长度为7的01字符串按3位一段分,可分为3段(即1,3,3,左边第一段只有一个二进制位),则满足条件的八进制数有: 2位数:高位为1:6个(即12,13,14,15,16,17),高位为2:5个,…,高位为6:1个(即67)。共6+5+…+1=21个。 3位数:高位只能是1,第2位为2:5个(即123,124,125,126,127),第2位为3:4个,…,第2位为6:1个(即167)。共5+4+…+1=15个。   所以,满足要求的r共有36个。 Input   输入文件digital.in只有1行,为两个正整数,用一个空格隔开:k W。 Output   输出文件digital.out为1行,是一个正整数,为所求的计算结果,即满足条件的不同的r的个数(用十进制数表示),要求最高位不得为0,各数字之间不得插入数字以外的其他字符(例如空格、换行符、逗号等)。   (提示:作为结果的正整数可能很大,但不会超过200位) Sample Input 3 7 Sample Output 36 ``` import java.lang.Math; import java.util.Scanner; public class Main { public static int fun(int m,int i,double n){ int count=0; if(m==-1)return 0; for(int k=i;k<n;++k){ if(m!=0)count+=fun(m-1,k+1,n); else{ ++count; } } return count; } public static void main(String[] args){ Scanner scan=new Scanner(System.in); int k=0,w=0; k=scan.nextInt(); w=scan.nextInt(); int n=w%k,m=w/k,count=0; if(n!=0){ for(int i=0;i<=Math.pow(2,n);++i){ if(m!=0){ count+=fun(m-1,i+1,Math.pow(2,k)); }else{ ++count; } } }else { count=fun(m,0,Math.pow(2,k)); } System.out.println(count); } } ``` 为什么提交结果是错的!!!!
2018ACM新生赛(热身赛)
星澈是信息技术学院中一位非常普通的学子,他除了脸盲外,还有一个缺点,就是他的数学非常差,简直就是一个“数学黑洞”,一天,他又被一道非常简单的题目难住了,这道题是这样的:“将一个十进制数转为二进制,并计算出二进制数中有多少个数字1”,你能帮帮他吗? 输入要求 第一行输入一个整数T(1<=T<=100),表示接下来有T组数据 每组数据包含一个N,代表需要计算的数字。(N<=100,000) 输出要求 对于每个测试样例,输出两行,第一行为转换后的2进制数,第二行为2进制数中1的个数。 测试数据 输入示例 3 6 66 666 输出示例 Case #1: 110 2 Case #2: 1000010 2 Case #3: 1010011010 5
用栈来实现回文数的时候测试数字13时出现异常(其余好像没问题)
**感谢您来帮忙。。。 ** ******* **题目描述** 我们把从左往右和从右往左念起来相同的数字叫做回文数。 某个数用某个进制表示不是回文数,但是用别的进制表示可能就是回文数。 例如,17是用十进制表示的数,显然它不是一个回文数,但是将17用二进制表示出来是10001。 现在给一个用十进制表示的数,请判断它在2~16进制下是否是回文数。 **输入** 输入包含多组测试数据。每组输入一个用十进制表示的正整数n(0 < n< 50000),当n=0时结束。 **输出** 对于每组输入,如果n在2~16进制中的某些进制表示下是回文数,则输出“Number i is palindrom in basis ”,在后面接着输出那些进制。其中i用n的值代替,后面输出的进制中,每两个数字之间空一个。 如果n在2~16进制的表示下都不为回文数,则输出“Number i is not a palindrom”,其中i用n的值代替。 **** **想法是:** 在转换进制的时候由于要反序,所以用栈来实现,在判断回文数的时候也是用栈来实现。 **状况** 在测试大的数的时候都没有问题,但是当数(num)改为13,14一类的时候,输出出现问题。然后检查,测试,也没发现问题。。。就很有问题。。 **代码如下:** ``` #include<iostream> using namespace std; struct Node { int data; Node* link; Node() { data = 0; link = NULL; } Node(int d) { data = d; link = NULL; } }; class LinkStack { private: Node* first; //头结点存储输入判断的数据,其余结点存储权位的值 Node* Locate(int i); //定位,返回地址,仅仅是给公有成员用 public: LinkStack(); //构造函数 LinkStack(int num); //构造函数 int Lenth(); //计算长度 int GetNum() { return first->data; } void Push(int num); //压栈 void Clear(); //清空栈 int Pop(); //弹出 }; LinkStack::LinkStack() { first = new Node; } LinkStack::LinkStack(int num) { first = new Node(num); } int LinkStack::Lenth() { Node* current = first; int count = 0; while (current->link != NULL) { current = current->link; count++; } return count; } Node* LinkStack::Locate(int i) { int count = 0; Node* current = first; for (count; count < i; count++) { current = current->link; } return current; } void LinkStack::Push(int num) { int x = this->Lenth(); Node* current = this->Locate(x); Node* newnode = new Node(num); if (newnode == NULL) { cerr << "error !" << endl; exit(1); } current->link = newnode; } void LinkStack::Clear() { int len = this->Lenth(); for (int i = 0; i < len; i++) { this->Pop(); } first->link = NULL; } int LinkStack::Pop() { int x = this->Lenth() - 1; //定位到栈顶前一个 Node* current = this->Locate(x); int value = current->link->data; delete current->link; current->link = NULL; return value; } void radix(LinkStack& a, int m) //转换进制 { int num = a.GetNum(); int x; //记录余数 do //由于进制转换的时候要反序,所以考虑压栈 { x = num % m; num = num / m; a.Push(x); //进制压栈 } while (num / m); a.Push(num); } bool judge(LinkStack& a) //判断是否为回文数 { LinkStack b; //回文数判断时需要压栈,所以新建一个栈 int x = a.Lenth() % 2; //需要判断长度的奇偶 for (int i = 0; i < a.Lenth()/2; i++) { b.Push(a.Pop()); //将转换为进制的一半压到b栈,并且弹出a栈的一半 } if (x==1) //为奇数 { int y = a.Pop(); //去掉a栈里面原来中间的元素(现在栈顶的元素) } for (int i = 0; i <= a.Lenth(); i++) { int x = a.Pop(); int y = b.Pop(); if (x!=y) return false; //判断回文 } return true; } int main() { while (1) { int num; //判断的数据 int count = 0; //用于计数 int x[50]; //用于记录是回文数的进制 cin >> num; if (num == 0) break; LinkStack a(num); for (int i = 2; i < 17; i++) //判断各种进制的可能,并将是回文数的进制记入数组 { radix(a, i); if (judge(a)) { x[count] = i; count++; } a.Clear(); } if (count == 0) { cout << "Number " << a.GetNum() << " is not a palindrom" << endl; } else { cout << "Number " << a.GetNum() << " is palindrom in basis "; for (int i = 0; i < count; i++) { cout << x[i] << ' '; } cout << endl; } } return 0; } ```
代码没有错误,为什么程序没运行完就直接结束了?
![图片说明](https://img-ask.csdn.net/upload/201908/08/1565246195_162168.png) ![图片说明](https://img-ask.csdn.net/upload/201908/08/1565246218_224284.png) ``` //主要功能:实现带小数二进制和十进制之间数据的转换 #include <iostream.h> #include <windows.h> #include <fstream.h> #include <string> #include <math.h> using namespace std; const int TAILMAXLENTH=10;//定义十进制转换成二进制小数部分最大位数 const int DABAMAXLENTH=40;//定义原始数据的最大长度 const double ADDMENBERNUM=111.11;//定义一个加数用于检测数据真实可用 /********************************************************************************************************* *栈的部分 *********************************************************************************************************/ class Stack;//类Stack的声明 /* 定义一个链栈结点类Stacknode */ class Stacknode { friend class Stack;//申请友元类 private: Stacknode(Stacknode *nextp=NULL);//构造函数 Stacknode(int &newdata,Stacknode *nextp=NULL);//构造函数 int data;//数据元素 Stacknode *next;//递归定义指向后继结点的指针 }; /* Stacknode的实现部分 */ Stacknode::Stacknode(Stacknode *nextp)//构造函数 { next=nextp; } Stacknode::Stacknode(int &newdata,Stacknode *nextp)//构造函数 { data=newdata; next=nextp; } //结点类Stacknode的定义结束 /* 定义一个链栈类Stack */ class Stack { public: Stack();//创建一个空栈 ~Stack();//回收一个栈 void clear();//销毁一个栈 bool empty() const;//确定栈是否已空 bool push(int &item);//把数据压进栈 bool pop();//出栈 bool top(int &item) const;//取出栈顶元素 private: Stacknode *newnode(Stacknode *nextp=NULL); Stacknode *newnode(int &item,Stacknode *nextp=NULL);//创建新的结点 Stacknode *Stacktop; int Stacklength; }; /* Stack的实现部分 */ Stacknode *Stack::newnode(Stacknode *nextp)//创建新的结点,不带数据 { return new Stacknode(nextp); } Stacknode *Stack::newnode(int &item,Stacknode *nextp)//创建新的结点,数据域赋值 { return new Stacknode(item,nextp); } //以下为栈类Stack的函数定义 Stack::Stack()//创建一个空栈 { Stacktop=newnode();//创建一个栈顶指针初始化,相当于Stacktop=NULL;本链表没有用头结点 Stacklength=0; } Stack::~Stack()//回收一个栈 { clear(); delete Stacktop;//释放栈底 } void Stack::clear()//销毁一个栈 { //while(pop());//不停地出栈,而每次释放空间在出栈函数中完成 Stacknode *usednodep;//定义指针usednodep,准备指向出栈的结点 while(Stacktop->next!=NULL) { usednodep=Stacktop;//指向出栈的结点 Stacktop=Stacktop->next;//栈顶指针后移 delete usednodep;//释放空间 } } bool Stack::empty() const//确定栈是否已空 { return Stacklength<=0?true:false; } bool Stack::push(int &item)//数据进栈 { Stacknode *newnodep;//定义指针newnodep,准备指向申请的新结点 newnodep=newnode(item,Stacktop);//申请新结点,把数据存入,把指针域指向头指针 if(!newnodep)//如果没有申请到空间,返回失败 return false; Stacktop=newnodep;//改链,完成进栈 Stacklength++;//栈的长度增加 return true;//本次操作成功 } bool Stack::pop()//出栈,不要栈顶数据 { Stacknode *usednodep;//定义指针usednodep,准备指向出栈的结点 if(!empty())//判断是否栈空 { usednodep=Stacktop;//指向出栈的结点 Stacktop=Stacktop->next;//栈顶指针后移 // delete usednodep;//释放空间 Stacklength--;//栈的长度减少 return true;//本次操作成功 } return false;//否则本次操作失败 } bool Stack::top(int &item) const//取出栈顶数据返回去 { if(!empty())//如果栈不空,记录当前栈顶元素 { item=Stacktop->data;//通过item返回去 return true;//本次操作成功 } return false;//否则本次操作失败 } /********************************************************************************************************* *队列的部分 *********************************************************************************************************/ /* 定义一个结点类node */ class node { public: int data; node *next; }; /* 定义一个链队类Queue */ class Queue { private: node *rear; node *front; protected: int count;//计数器,统计结点个数即线性队列的长度 public: Queue();//构造函数 ~Queue();//析构函数 void clear(void);//清空链队 bool empty(void) const;//判断是否空队 bool retrieve(int &item) const;//读取队头 bool append(const int &item);//数据入队 bool serve();//数据出队 }; /* 类Queue的实现部分 */ Queue::Queue()//构造函数 { front=new node;//申请新结点,作为队头结点 front->next=NULL; rear=front;//队尾指针指向队头 count=0;//计数器清零,队列开始时没有实际数据 } Queue::~Queue()//析构函数 { clear();//删除所有数据,释放所有结点 delete front;//把头结点也释放掉 count=0;//计数器清零,队列开始时没有实际数据 } void Queue::clear(void)//清空链队 { node *searchp=front->next,*followp=front;//初始化两个指针 while(searchp!=rear) { followp=searchp; searchp=searchp->next; delete followp; } front->next=NULL;//保留了最后一个结点,就是头结点,并且链域置为空 rear=front; count=0;//计数器也清零 } bool Queue::empty(void) const//判断是否空链 { return count==0?true:false; } bool Queue::retrieve(int &item) const//读取队头 { if(empty())//处理意外 return false; item=front->next->data;//返回读取的数据 return true;//本次操作成功 } bool Queue::append(const int &item)//进队 { node *newnodep=new node; newnodep->data=item;//给数据赋值 rear->next=newnodep;//这一步可以看出有头结点 rear=rear->next;//改动队尾指针的位置 count++;//计数器加1 return true; } bool Queue::serve()//出队 { if(empty())//空队处理 return false; node *tempp=front->next; // item=tempp->data;//保存数据 front->next=tempp->next;//改变指针 delete tempp;//释放该结点 count--;//计数器减1 return true; } /********************************************************************************************************* *定义一个功能类NumSysConversion *********************************************************************************************************/ class NumSysConversion { private: int inter; float floater; Stack *stack; Queue *queue; public: NumSysConversion();//构造函数 ~NumSysConversion();//析构函数 bool check(char *array,int number);//检查输入数据是否符合要求 void change(char *array,int number);//将原始数据转化成数值 double change_to_aim(int tokind);//将原始数据转化成目标进制的数据 }; NumSysConversion::NumSysConversion()//构造函数 { stack=new Stack; queue=new Queue; inter=0; floater=0; } NumSysConversion::~NumSysConversion()//析构函数 { delete stack; delete queue; } bool NumSysConversion::check(char *array,int number)//检查输入数据是否符合要求 { bool flag=true; for(int i=0;array[i]!='\0';i++) { cout<<array[i]; if(array[i]-48>=number) { flag=false; break; } } return flag; } void NumSysConversion::change(char *array,int number)//将原始数据转化成数值 { int flag=0,j=0; for(int i=0;array[i]!='\0';i++) { if(array[i]=='.') { flag=1; continue; } if(flag==0)//取整数数据 inter=inter*number+array[i]-48; if(flag==1)//取小数数据 floater+=(float)(((int)array[i]-48)*(float)pow(number,--j)); } } double NumSysConversion::change_to_aim(int tokind)//将原始数据转化成目标进制的数据 { int count=0,temp,flag=0,num; double resnumb=0; //第一步:先将整数部分转换进制后的数据依次入栈 while(inter) { num=inter%tokind; stack->push(num); inter/=tokind; } //第二步:再将小数部分转换进制后的数据依次入队 while(floater&&count<TAILMAXLENTH) { queue->append(int(floater*tokind)); floater*=tokind; if(floater>=1) floater-=(int)floater; count++; } //第三步:显示栈和队中的数据并将其转换成可用数据 cout<<"数据转换后为:"; while(!stack->empty()) { stack->top(temp); stack->pop(); cout<<temp; resnumb=resnumb*tokind+temp; flag=1; } if(!queue->empty()) { if(flag==0) cout<<"0"; cout<<"."; count=-1; } while(!queue->empty()) { queue->retrieve(temp); queue->serve(); cout<<temp; resnumb+=temp*pow(tokind,count--); } cout<<endl; //第四步:清空栈和队中的数据 stack->clear(); queue->clear(); inter=0; floater=0; //第五步:将可用数据信息返回 return resnumb; } /* 定义一个实现进制转换功能的菜单处理类interfacebase */ class interfacebase { private: NumSysConversion NumSysConversiononface; public: void clearscreen(void);//清屏 void showmenu(void);//显示菜单函数 int userchoice(void);//用户的选项 void processmenu(int menuchoice);//菜单函数 }; /* 类interfacebase的实现部分 */ void interfacebase::clearscreen(void) { system("cls"); } void interfacebase::showmenu(void) { cout<<"进制转换功能菜单"<<endl; cout<<"================"<<endl; cout<<"1.十进制转换为二进制"<<endl; cout<<"2.二进制转换为十进制"<<endl; cout<<"0.结束程序"<<endl; cout<<"================"<<endl; } int interfacebase::userchoice(void) { int menuchoice; cout<<"请输入您的选择:"; cin>>menuchoice; return menuchoice; } void interfacebase::processmenu(int menuchoice) { switch(menuchoice)//根据用户的选择进行相应的操作 { case 1: { char array[10]={'0','.','1','2','5'}; int number=10; if(NumSysConversiononface.check(array,number)) cout<<"符合要求!"<<endl; else cout<<"不符合要求!"<<endl; NumSysConversiononface.change(array,number); cout<<NumSysConversiononface.change_to_aim(2)<<endl; cout<<"进制转换成功!"<<endl; } break; case 2: { char array[10]={'1','1','1','1'}; int number=2; if(NumSysConversiononface.check(array,number)) cout<<"符合要求!"<<endl; else cout<<"不符合要求!"<<endl; NumSysConversiononface.change(array,number); cout<<NumSysConversiononface.change_to_aim(10)<<endl; cout<<"进制转换成功!"<<endl; } break; case 0: exit(0); default: cout<<"对不起,您输入的功能编号有错!请重新输入!!!"<<endl; break; } } /* 程序主入口 */ void main(void) { int menuchoice;//定义变量,菜单选单项的选择 interfacebase interfacenow; system("color f0");//修改屏幕的背景色和字的颜色 interfacenow.clearscreen();//清屏 while(1)//永真循环 { interfacenow.showmenu();//显示菜单 menuchoice=interfacenow.userchoice();//获取用户的选择 interfacenow.processmenu(menuchoice);//处理用户的选择 system("pause");//暂停 interfacenow.clearscreen();//清屏 } }//主函数结束 ```
C实现的Server与Websocket握手失败
我想用C实现一个WebSocket服务器,但是始终不能握手成功,在谷歌浏览器用一个静态网页做调试,以下是C处理请求代码的部分 ``` while (true) { app_sock = accept(listen_sock, (struct sockaddr *)&clientaddr, &socklen); if (app_sock < 0) { printf("LOG_ERR: %s:%d, accept failed", __FILE__, __LINE__); system("pause"); exit(1); } char IPdotdec[20] = { 0 }; inet_ntop(AF_INET, &clientaddr.sin_addr, IPdotdec, sizeof(IPdotdec));//将二进制整数转换为点分十进制 ntohs(clientaddr.sin_port);//将16位网络字节顺序转换为主机字节顺序 //以下用于多路复用 //FD_ZERO(&set);//清空集合 //FD_SET(app_sock, &set);//将套接字加入集合 //select(app_sock+1, &set, NULL, NULL, NULL); //if (FD_ISSET(app_sock, &set)) { // memset(recvbuf, 0, RECV_BUF_SIZE); //receive data recvlen = recv(app_sock, recvbuf, RECV_BUF_SIZE, 0); if (recvlen < 0) { if (errno == EINTR) recvlen = 0; else exit(1); } printf("receive data is \n: %s \n", recvbuf); char *sendbuf = handshake(recvbuf, clientaddr, app_sock); int ret = send(app_sock, sendbuf, strlen(sendbuf), 0); //int ret = send(app_sock, sendbuf, strlen(sendbuf), 0); if (ret == SOCKET_ERROR) { printf("send() failed len:%d:\n", strlen(sendbuf)); //printf("send() len:%d:\n", strlen(sendbuf)); } closesocket(app_sock); } ``` 我不明白循环的closesocket()有没有影响,在调试的时候,如果注释掉closesocket()则send()无法发送出消息因为,在谷歌浏览器上看到客户端一直在等待直到到超时;如果加上closesocket()客户端能收到正确的头部,客户端请求头部如下 ``` GET / HTTP/1.1 Connection:Upgrade Host:127.0.0.1:8088 Origin:null Sec-WebSocket-Extensions:x-webkit-deflate-frame Sec-WebSocket-Key:puVOuWb7rel6z2AVZBKnfw== Sec-WebSocket-Version:13 Upgrade:websocket ``` 我返回的头部如下 ``` HTTP/1.1 101 Switching Protocols Connection:Upgrade Server:beetle websocket server Upgrade:WebSocket Date:Mon, 26 Nov 2012 23:42:44 GMT Access-Control-Allow-Credentials:true Access-Control-Allow-Headers:content-type Sec-WebSocket-Accept:FCKgUr8c7OsDsLFeJTWrJw6WO8Q= ``` 因为是新手,真的困扰很久了,希望各位前辈帮帮我
java这个简单的服务器我要如何读取客户端的输入信息?
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.Set; public class EchoServer { public static int DEFAULT_PORT = 7; public static String text=""; public static ServerSocketChannel server; public static SocketChannel client ; public static ByteBuffer output ; public static void main(String[] args){ int port; try{ port = Integer.parseInt(args[0]); }catch(RuntimeException ex){ port = DEFAULT_PORT; } System.out.println("Listening for connertions on port "+port); ServerSocketChannel serverChannel; Selector selector; try{ serverChannel = ServerSocketChannel.open(); ServerSocket ss = serverChannel.socket(); InetSocketAddress address = new InetSocketAddress(port); ss.bind(address); serverChannel.configureBlocking(false); selector =Selector.open(); serverChannel.register(selector, SelectionKey.OP_ACCEPT); }catch(IOException ex){ ex.printStackTrace(); return; } while(true){ try{ selector.select(); }catch(IOException ex){ ex.printStackTrace(); break; } Set<SelectionKey> readyKeys = selector.selectedKeys(); Iterator<SelectionKey> iterator = readyKeys.iterator(); while(iterator.hasNext()){ SelectionKey key = iterator.next(); iterator.remove(); try{ if(key.isAcceptable()){ ServerSocketChannel server = (ServerSocketChannel) key.channel(); SocketChannel client = server.accept(); System.out.println("Accepted connection from "+client); client.configureBlocking(false); SelectionKey clientKey = client.register(selector, SelectionKey.OP_WRITE|SelectionKey.OP_READ); ByteBuffer buffer = ByteBuffer.allocate(100); clientKey.attach(buffer); } if(key.isReadable()){ client =(SocketChannel)key.channel(); output = (ByteBuffer)key.attachment(); client.read(output); output.flip(); Charset charset = Charset.forName("UTF-8"); CharsetDecoder decoder = charset.newDecoder(); CharBuffer charBuffer = null; charBuffer = decoder.decode(output); text=charBuffer.toString(); //if(text.equals("time")) //{ //System.out.println("2"); Date date=new Date(); DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time=format.format(date); byte b[] = time.getBytes(); //将十六进制字符串转换成十进制整数 //int i=Integer.decode(time); //创建一个大小为1的字节缓冲区因为只放一个byte值 ByteBuffer bb=ByteBuffer.allocate(1); //将十进制整数转换成二进制byte值然后存进ByteBuffer //bb.put(b); //打印ByteBuffer中的byte值 //byte []b1=bb.array(); client.write(output); // output.compact(); //} // text=output.toString(); //System.out.println(text); //output.compact(); } if(key.isWritable()){ client = (SocketChannel) key.channel(); output = (ByteBuffer)key.attachment(); //output.flip(); client.write(output); //output.compact(); } }catch(IOException ex){ key.cancel(); try{ key.channel().close(); }catch(IOException cex){} } } } } } 这是我写的,中间有点乱,因为客户在cmd访问我的服务器如果他输入time,我要给他返回时间。。。大神求助!!
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
我在支付宝花了1分钟,查到了女朋友的开房记录!
在大数据时代下,不管你做什么都会留下蛛丝马迹,只要学会把各种软件运用到极致,捉奸简直轻而易举。今天就来给大家分享一下,什么叫大数据抓出轨。据史料证明,马爸爸年轻时曾被...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
使用 Python 和百度语音识别生成视频字幕
文章目录从视频中提取音频根据静音对音频分段使用百度语音识别获取 Access Token使用 Raw 数据进行合成生成字幕总结 从视频中提取音频 安装 moviepy pip install moviepy 相关代码: audio_file = work_path + '\\out.wav' video = VideoFileClip(video_file) video.audio.write_...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
Java校招入职华为,半年后我跑路了
何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
点击上方蓝字设为星标下面开始今天的学习~今天分享四个代码量很少,但很牛逼很经典的算法或项目案例。1、no code 项目地址:https://github.com/kelseyhight...
Python全栈 Linux基础之3.Linux常用命令
Linux对文件(包括目录)有很多常用命令,可以加快开发效率:ls是列出当前目录下的文件列表,选项有-a、-l、-h,还可以使用通配符;c功能是跳转目录,可以使用相对路径和绝对路径;mkdir命令创建一个新的目录,有-p选项,rm删除文件或目录,有-f、-r选项;cp用于复制文件,有-i、-r选项,tree命令可以将目录结构显示出来(树状显示),有-d选项,mv用来移动文件/目录,有-i选项;cat查看文件内容,more分屏显示文件内容,grep搜索内容;>、>>将执行结果重定向到一个文件;|用于管道输出。
​两年前不知如何编写代码的我,现在是一名人工智能工程师
全文共3526字,预计学习时长11分钟 图源:Unsplash 经常有小伙伴私信给小芯,我没有编程基础,不会写代码,如何进入AI行业呢?还能赶上AI浪潮吗? 任何时候努力都不算晚。 下面,小芯就给大家讲一个朋友的真实故事,希望能给那些处于迷茫与徘徊中的小伙伴们一丝启发。(下文以第一人称叙述) 图源:Unsplash 正如Elsa所说,职业转换是...
强烈推荐10本程序员必读的书
很遗憾,这个春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终将会...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
非典逼出了淘宝和京东,新冠病毒能够逼出什么?
loonggg读完需要5分钟速读仅需 2 分钟大家好,我是你们的校长。我知道大家在家里都憋坏了,大家可能相对于封闭在家里“坐月子”,更希望能够早日上班。今天我带着大家换个思路来聊一个问题...
牛逼!一行代码居然能解决这么多曾经困扰我半天的算法题
春节假期这么长,干啥最好?当然是折腾一些算法题了,下面给大家讲几道一行代码就能解决的算法题,当然,我相信这些算法题你都做过,不过就算做过,也是可以看一看滴,毕竟,你当初大概率不是一行代码解决的。 学会了一行代码解决,以后遇到面试官问起的话,就可以装逼了。 一、2 的幂次方 问题描述:判断一个整数 n 是否为 2 的幂次方 对于这道题,常规操作是不断这把这个数除以 2,然后判断是否有余数,直到 ...
立即提问